1

我有以下属性,我想使用 Linq 进行过滤。这允许我认为绑定可以很好地更新 UI:

public ObservableCollection<Worker> Workers
{
    get { return DataManager.Data.MasterWorkerList; }
}

这些解决方案在另一篇文章中提出,但它们不允许更新视图:

get { return new ObservableCollection<Worker>(DataManager.Data.MasterWorkerList.Where(w => w.Known != true)); }

get
{
    var workerList = DataManager.Data.MasterWorkerList.Where(w => w.Known != true);
    return workerList.ToObservableCollection<Worker>();
}

DataManager是一个单例类并且Data是它的实例。如何在此属性中使用 Linq 过滤而不会放弃 UI 更新?

4

1 回答 1

1

虽然这并不是真正的“使用 LINQ 过滤”,但如果您正在使用ObservableCollection,您可以使用 aPagedCollectionView将过滤器添加到集合中。

        PagedCollectionView items = new PagedCollectionView(Workers);
        items.Filter = (o) => (o as Worker).Known != true;

然后绑定到items.

LINQ 的问题在于它创建了一个新集合,因此它破坏了绑定。它仍然可以使用它,但它可能有点烦人。如果以上不是您需要的,请告诉我,我会尝试解决其他问题。;)

编辑:PagedCollectionView仅在 Silverlight 中可用。如果您使用的是 WPF,那么您可以尝试这样的事情:

        ICollectionView items = CollectionViewSource.GetDefaultView(Workers);
        items.Filter = (o) => (o as Worker).Known != true;

另外,我推荐这篇关于如何在 WPF 中显示数据(包括排序、过滤等)的文章。

于 2013-06-19T07:42:47.160 回答