LINQ查询到Observable集合

时间:2011-01-14 08:37:39

标签: c# linq datagrid observablecollection

我有一个可观察的集合,其中包含多个DocumentEntry对象,每个对象都有一个语言属性。我在DataGrid中呈现这一点,以便文档可以更新,但是条目变得太多,所以我添加了一个带有语言名称的组合框,现在我只需要提供该语言的文档。

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

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

LINQ查询的结果不是可观察的集合。我是否以正确的方式过滤?我怎样才能最好地过滤数据网格中的ObservableCollection,在本例中是通过语言?

干杯

的Nik

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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。