我有一个可观察的集合,其中包含多个DocumentEntry对象,每个对象都有一个语言属性。我在DataGrid中呈现这一点,以便文档可以更新,但是条目变得太多,所以我添加了一个带有语言名称的组合框,现在我只需要提供该语言的文档。
文档集是一个ObservableCollection,但是当我说
时myDataGrid.DataContext = (from d in documents where d.language == selectedLanguage select d);
LINQ查询的结果不是可观察的集合。我是否以正确的方式过滤?我怎样才能最好地过滤数据网格中的ObservableCollection,在本例中是通过语言?
干杯
的Nik
答案 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。