Wpf 可观测集合的多视图

Wpf 可观测集合的多视图,wpf,vb.net,filter,observablecollection,Wpf,Vb.net,Filter,Observablecollection,我已经在这个问题上工作了一段时间,很明显我遗漏了一些东西 我创建、填充和绑定一个可观察的集合,如下所示: Dim _ObservableWEI As New ObservableWEI ... _ObservableWEI.Add(New WEI() With {.WEInum = 1, .WEIvalue = 1}) _ObservableWEI.Add(New WEI() With {.WEInum = 2, .WEIvalue = 0}) _Observab

我已经在这个问题上工作了一段时间,很明显我遗漏了一些东西

我创建、填充和绑定一个可观察的集合,如下所示:

    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
这很好。我现在需要第二个列表框,其中包含该集合的筛选版本。filter函数提取值为1的元素

    Dim view As ListCollectionView
...
    view = CType(CollectionViewSource.GetDefaultView(_ObservableWEI), ListCollectionView)
    view.Filter = New Predicate(Of Object)(AddressOf ListFilter)
...
    lbxView.ItemsSource = view
问题是过滤器会影响两个列表框的内容。我想我也需要一个集合的特定实例来应用过滤器之类的东西,但我不知所措


谢谢您的帮助。

我认为问题在于您正在绑定到默认视图,当您更改此视图时,您正在更改绑定到同一集合的所有内容的视图。从:

所有集合都有默认的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

这正是我需要的!非常感谢