1

是否可以在属性内过滤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.ObservableCollection1 [AoW.Models.Worker]”的对象

可以这样过滤吗?如果是这样,我错过了什么?

4

1 回答 1

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;
    }
}
于 2013-06-19T02:46:02.617 回答