如何过滤Observable Collection类集合

9
我已经实现了Linq-To-Sql,添加了必要的表格。之后,linq类会自动为字段设置属性。我使用ObservableCollection类实现了一个类,并在其构造函数中传递了datacontextclass对象。
那么,在获取所有数据后如何进行过滤?
下面是BindBookIssueDetails类的示例代码,它继承自ObservableCollection类并接受DataClasses1DataContext参数:
public class BindBookIssueDetails : ObservableCollection
{
    public BindBookIssueDetails(DataClasses1DataContext dataDC)
    {
        foreach (Resource_Allocation_View res in dataDC.Resource_Allocation_Views)
        {
            this.Add(res);
        }
    }
}
下面是将bResource实例化并将其赋值给_cmbResource.ItemSource的示例代码:
private BindBookIssueDetails bResource;
bResource = new BindBookIssueDetails(db);
_cmbResource.ItemSource=bResource;
希望对你有所帮助。
2个回答

13

您可以使用 CollectionViewSource 并对其进行过滤,以便仅影响视图(.XAML)的一侧。

    ICollectionView collectionView = CollectionViewSource.GetDefaultView(bResource);
    collectionView.Filter = new Predicate<object>(YourFilterFunction);

查看此博客以获取更多细节。http://bea.stollnitz.com/blog/?p=31


0

我尝试使用@Jobi的解决方案,但由于某种原因,我在尝试触发FilterFunction时遇到了异常。

所以我采用了稍微不同的方法。我将CollectionViewSourceDefaultView转换为BindingListCollectionView

myVS=(BindingListCollectionView)CollectionViewSource.GetDefaultView(sourceofdata);

现在我可以构建类似 SQL 的过滤字符串并像这样应用它:

myVS.CustomFilter=myfilterstring;

我仍然会尝试解决我的问题(我认为@Jobi的解决方案更灵活)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接