WPF ObservableCollection:1つのフォームのコンボボックスに空白行を追加する方法は、実際には観測可能な収集には影響しませんか?
-
28-09-2019 - |
質問
データリポジトリクラスに静的な観測可能な収集があります。私はそれを使用して、私のフォームの1つにコンボボックスを入力します(nullを表す空白線を含める必要があります)。
私は同じ観測可能な収集を使用してデータグリッドを入力するため、実際の観察能力に空白のアイテムが必要ではありません。実際にこれを行うにはどうすればよいですか?
ああ、そして私がこれをしたい理由は、私が両方のフォームを開いていて、ObservableCollectionからアイテムを削除した場合、それは両方のリストにそれを反映する必要があるためです。
解決
- コンボボックスでnull値を選択することはできません。
- ブランクアイテムを使用してコントロールに表示する必要があります。
私は同じ問題を抱えており、現在のプロジェクトでこのソリューションを使用しています。
public class ObservableCollectionCopy<T> : ObservableCollection<T> { public ObservableCollectionCopy(T firstItem, ObservableCollection<T> baseItems) { this.FirstItem = firstItem; this.Add(firstItem); foreach (var item in baseItems) this.Add(item); baseItems.CollectionChanged += BaseCollectionChanged; } public T FirstItem { get; set; } private void BaseCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { if (e.NewItems != null) foreach (var newItem in e.NewItems.Cast<T>().Reverse()) this.Insert(e.NewStartingIndex + 1, newItem); if (e.OldItems != null) foreach (var oldItem in e.OldItems.Cast<T>()) this.Remove(oldItem); } }
新しいコレクションには、ベースコレクションへの一方向のバインディングがあります。
this.SelectableGroups = new ObservableCollectionCopy<GroupModel>(
new GroupModel{Id = -1, Title = "Any group"},
this.GroupsCollection);
フィルタリング:
if (this.selectedGroup != null && this.selectedGroup.Id != -1)
this.MyCollectionView.Filter = v => v.SomeItem.GroupId == this.selectedGroup.Id;
else this.MyCollectionView.Filter = null;
他のヒント
使用できるかもしれません TargetNullValue
ヌル値の出力を宣言するための拘束力のある宣言のプロパティ。
<ComboBox ItemsSource={Binding Path=Collection, TargetNullValue="-------"}/>
所属していません StackOverflow