LINQ查询转换为可观察集合

3

我有一个可观察的集合,其中包含多个 DocumentEntry 对象,每个对象都有一个语言属性。我将其呈现在 DataGrid 中,以便可以更新文档,但是条目太多了,因此我添加了一个带有语言名称的组合框,现在我需要仅显示该语言的文档。

文档集合是一个 ObservableCollection,但当我说

myDataGrid.DataContext = (from d in documents where d.language == selectedLanguage select d);

LINQ查询的结果不是一个可观察的集合。我是否正确地过滤了它?在我的数据网格中,如何最好地按语言过滤ObservableCollection?
谢谢,
Nik
2个回答

1

最好使用CollectionViewSource.Filter

类似这样

myDataGrid.DataContext = documents;
CollectionViewSource cvs = CollectionViewSource.GetDefaultView(documents);
vse.Filter = delegate(object obj)
{
   Document doc = obj as Document;
   if(doc == null)
       return false;
   return doc.language == selectedLanguage;
}

0

试试这个,

XAML:

<Listbox x:name="MyLB"/>

CB:

Dim q = from c as myobject in myobservablecollection where c.CriteriaA= CriteriaB

MyLb.Itemsource =  q.ToList

基本原则:只能为已创建的对象设置Datacontext。就LINQ而言,您需要将LINQ结果查询作为TOLIST传递以反映过滤视图。

注意:这不会更新,因为ToList是一个通用列表,没有实现INotifyPropertyChanged。


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