2012-03-13 5 views
4

Я работаю над этой проблемой на некоторое время, и я явно не хватает что-то ...Несколько видов НАБЛЮДАЕМЫХ Collection

я создаю, населяющие и связывают наблюдаемую коллекцию так:

Dim _ObservableWEI As New ObservableWEI 
... 
    _ObservableWEI.Add(New WEI() With {.WEInum = 1, .WEIvalue = 1}) 
    _ObservableWEI.Add(New WEI() With {.WEInum = 2, .WEIvalue = 0}) 
    _ObservableWEI.Add(New WEI() With {.WEInum = 3, .WEIvalue = 2}) 
... 
    lbxAll.ItemsSource = _ObservableWEI 

Это нормально. Теперь мне нужен второй список, содержащий отфильтрованную версию коллекции. Функция фильтра вытаскивает элементы с WEIvalue = 1.

Dim view As ListCollectionView 
... 
    view = CType(CollectionViewSource.GetDefaultView(_ObservableWEI), ListCollectionView) 
    view.Filter = New Predicate(Of Object)(AddressOf ListFilter) 
... 
    lbxView.ItemsSource = view 

Проблема в том, что эффекты фильтра содержимое обоих ListBoxes. Наверное, мне нужен конкретный экземпляр коллекции, чтобы применить фильтр или что-то еще, но я в недоумении!

Спасибо за любую помощь.

ответ

3

Я думаю, проблема в том, что вы привязываетесь к представлению по умолчанию, и когда вы меняете это, вы меняете представление на все связанные с одной и той же коллекцией. От docs for CollectionViewSource.GetDefaultView:

Все коллекции имеют CollectionView по умолчанию. WPF всегда привязывается к представлению, а не к коллекции. Если вы привязываетесь непосредственно к коллекции, WPF фактически привязывается к представлению по умолчанию для этой коллекции. Это представление по умолчанию используется всеми связями с коллекцией, что приводит к тому, что все прямые привязки коллекции объединяют характеристики сортировки, фильтрации, группы и текущего элемента одного представления по умолчанию.

Дизайн шаблона Collection и CollectionView заключается в том, что у вас есть одна коллекция, но несколько видов. Поэтому я думаю, что вам нужно сделать два объекта коллекционного просмотра:

Dim view1 As new ListCollectionView(_ObservableWEI) 
'set filtering, grouping, etc. 

'bind to it 
lbxAll.ItemsSource = view1 

Dim view2 As new ListCollectionView(_ObservableWEI) 
'set filtering, grouping, etc. 

'bind to it 
lbxView.ItemsSource = view2 
+0

Это именно то, что мне нужно! Большое спасибо – qu1ckdry

+0

Вы очень желанны. –

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