我最近向我的一个域实体添加了一个 Disabled 属性。我List<T>
在视图模型中有一个这些实体。我只是更改了 getter 以根据 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);
而且我想我知道为什么:newGroup 被添加到 newObservableCollection<T>
中,而不是 _customVariableGroups 的支持字段。
如果 LINQ Where() 扩展方法能够返回ObservableCollection<T>
(私有支持字段本身的类型)而不是 IEnumerable,我认为我不会遇到这个问题。就目前而言,由于 Where() 返回IEnumerable<T>
,我需要将其包装在一个新的ObservableCollection<T>
.
我在同一视图模型中添加新项目的正确/最佳方式是什么?我需要将其直接添加到私有支持字段吗?我不想这样做,因为我不想记住不要使用该属性本身。