2011-01-14 3 views
3

У меня есть наблюдаемая коллекция, содержащая несколько объектов DocumentEntry, каждая из которых обладает свойством языка. Я представляю это в DataGrid, чтобы документы могли быть обновлены, но это стало слишком большим количеством записей, поэтому я добавил комбобокс с именами языков, и теперь мне нужно представить только документы этого языка.Запрос LINQ к коллекции Observable

Сборник документов является ObservableCollection, но когда я говорю

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

результат запроса LINQ не является наблюдаемой коллекции. Я правильно фильтрую этот путь? Как я могу наилучшим образом фильтровать ObservableCollection в моем datagrid, в этом случае языком?

Приветствия

Nik

ответ

1

Лучше Yous 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

Большое спасибо :-) – niklassaers

+0

Вы хорошо –

0

Try Это

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.

Смежные вопросы