是否可以在属性中过滤ObservableCollection
?我尝试了以下各种变体:
public ObservableCollection<Worker> Workers
{
get { return DataManager.Data.MasterWorkerList.Where(w => w.Known == true); }
set { DataManager.Data.MasterWorkerList = value; }
}
我收到错误消息:
无法隐式转换类型 'System.Collections.Generic.IEnumerable'到 'System.Collections.ObjectModel.ObservableCollection'。 存在显式转换(您是否错过了演员?)
当我转换类型时,程序会编译,但我得到一个InvalidCastException
说
无法投射类型的对象 'WhereEnumerableIterator
1[AoW.Models.Worker]' to type 'System.Collections.ObjectModel.ObservableCollection
1 [AoW.Models.Worker]'
有可能以这种方式过滤吗?如果是这样,我错过了什么?
答案 0 :(得分:3)
您需要将IEnumerable<Worker>
转换为ObservableCollection<Worker>
。您可以通过将IEnumerable
传递到ObservableCollection
的构造函数中来创建新文件,如下所示:
return new ObservableCollection<Worker>(DataManager.Data.MasterWorkerList.Where(w => w.Known == true));
通过定义扩展方法,您可以使代码更具可读性。这可以这样做:
public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> source)
{
if (source == null)
{
throw new ArgumentNullException("source");
}
return new ObservableCollection<T>(source);
}
因此,您的代码将变得非常简单和可读
public ObservableCollection<Worker> Workers
{
get
{
var workerList = DataManager.Data.MasterWorkerList.Where(w => w.Known == true);
return workerList.ToObservableCollection<Worker>();
}
set
{
DataManager.Data.MasterWorkerList = value;
}
}