我有3个listviews。 itemsources绑定到ObservableCollection,person类具有整数属性(使用INotifyPropertyChanged)“teamID”。现在我想根据他们所在的团队过滤列表视图,有没有办法轻松完成(我知道2个解决方案,但我认为它们不好,1是制作3 ObservableCollection但是这对于保持跟踪并将所有人员转移到正确的ObservableCollection,或者如果teamID是正确的teamID ^^,则使用类似可见性的触发器^^) 我有3个按钮,如果我在任何列表视图中选择一个项目(人物),根据点击的按钮,该人员队伍ID将会改变。 (但我也希望他根据teamID更改为正确的列表视图)
希望您理解,否则请随时询问更多细节。
答案 0 :(得分:2)
我认为如果不编写一些代码就无法做到。
我会使用CollectionView
而不是将集合直接绑定到ListView。这就是WPF在内部所做的事情,但是由你自己创建它们可以控制许多事情,比如排序和过滤器。
使用CollectionViewSource.GetDefaultView(yourCollection)
创建它们。
应用过滤器并在您的团队ID属性的setter上,当团队ID更改时,请执行CollectionView.Refresh()
。如果您没有太多数据,这不是一个大问题。但是在三个视图上的大量数据Refresh()
可能有点重。
编辑:
我忘了告诉你必须将每个ListView上的源设置为相应的CollectionView,但我认为这很明显。
答案 1 :(得分:0)
绑定公共财产
public List<person> SrtedPerson1 { get { return ListView.DataSource = OriginalList.Where(x => x.TeamId==filteringTeamId).ToList(); }}
让Button调用NotifyPropertyChanged(“SrtedPerson1”);
仅此一项不会为您提供动态更新ListView.DataSource = OriginalList.Where(x =&gt; x.TeamId == filteringTeamId),因为它仅返回iEnumerable。
在公开场合,我返回List,就好像你只是返回iEnumerable一样,无论如何它都将被包装为控件