我想在我的ObservableCollection上使用linq创建一个查询,但它并没有真正起作用T的尝试。
我有一个模型Entry
,其中{note, information, isActive}
为参数。所以我现在想简单地得到isActive为真的所有Entries
。我没有在我的数据提供者上使用它(一旦数据被加载),因为我需要将每个条目加载到程序中。
所以我想在我的条目ObservableCollection:
中覆盖getter public ObservableCollection<Note> _entries { get; set; }
public ObservableCollection<Note> entries
{
get
{
return new ObservableCollection<Note>(from entry in this._entries
where entry.isActive == true
select entry);
}
set { this._entries = value; }
}
但正如你可能猜到的那样,它不起作用。
此致
答案 0 :(得分:2)
尝试
get
{
List<Notes> list = _entries.Where(e=>e.isActive).ToList();
return new ObservableCollection<Note>(list) ;
}
答案 1 :(得分:1)
尝试更新refinedEntries
&#39;中的entries
,而不是在get中对其进行编辑。二传手。我的Linq
陈述可能需要工作,但它包含了我试图建议的内容。
基本上保留所有内容的副本,即使条目中的非活动记录和另一个集合中只包含活动记录。在这种情况下,我称之为refinedEntries
。
private ObservableCollection<Note> _entries;
public ObservableCollection<Note> entries
{
get{return _entries;}
set
{
_entries = value;
RefinedEntries = new ObservableCollection(_entries.Where(e=>e.isActive).Select(e => e));
}
}
public ObservableCollection<Note> refinedEntries {get;set;}
我还建议在refinedEntries
触发时更新CollectionChangedEvent
。在这种情况下,唯一的refinedEntries
更新时间是entries
设置为新实例。
当您为条目实例化新集合时,请订阅其CollectionChangedEvent
。例如,如果您在Model的构造函数中实例化集合,则可以使用以下代码。
entries = new ObservableCollection<Note>();
entries.CollectionChangedEvent += new NotifyCollectionChangedEventHandler((sender,args) =>
{
RefinedEntries = new ObservableCollection(_entries.Where(e=>e.isActive).Select(e => e));
//Notify the UI that an update has been made.
OnPropertyChanged("RefinedEntries");
});