最近、ドメインエンティティの1つにDisabledプロパティを追加しました。ビューモデルにList<T>
これらのエンティティが1つあります。無効になっているアイテムを選択的に表示するように、UI設定に基づいてリストをフィルタリングするようにゲッターを変更しました。
public ObservableCollection<CustomVariableGroup> CustomVariableGroups
{
get
{
if (this.ShowDisabled) { return this._customVariableGroups; }
return new ObservableCollection<CustomVariableGroup>(this._customVariableGroups.Where(x => x.Disabled == false));
}
}
問題は、(同じビューモデルで)これを実行しようとすると、アイテムがコレクションに追加されないことです。
this.CustomVariableGroups.Add(newGroup);
そして、私はその理由を知っていると思います。_customVariableGroupsObservableCollection<T>
のバッキングフィールドではなく、newGroupがnewに追加されています。
LINQ Where()拡張メソッドがObservableCollection<T>
IEnumerableではなく(プライベートバッキングフィールド自体のタイプ)を返すことができた場合、この問題は発生しないと思います。現在のところ、Where()はを返すIEnumerable<T>
ので、それを新しいでラップする必要がありますObservableCollection<T>
。
同じビューモデル内に新しいアイテムを追加するための正しい/最良の方法は何ですか?プライベートバッキングフィールドに直接追加する必要がありますか?プロパティ自体を使用しないことを覚えておく必要がないので、それはしたくありません。