【问题标题】:Listviews with same itemsource different filter具有相同itemsource不同过滤器的Listviews
【发布时间】:2012-04-09 10:39:12
【问题描述】:

我有 3 个列表视图。 itemsources 绑定到一个 ObservableCollection,person 类有一个整数属性(带有 INotifyPropertyChanged)“teamID”。现在我想根据他们所在的团队过滤列表视图,有没有办法让它变得简单(我知道 2 个解决方案,但我认为它们不好,1 是制作 3 个 ObservableCollection 但这会很复杂跟踪并将所有人员转移到正确的 ObservableCollection ,或者如果 teamID 是正确的 teamID,则使用诸如 Visibility to Visible 之类的触发器^^) 我有 3 个按钮,如果我在任何列表视图上选择一个项目(人),取决于单击的按钮,那个人的 teamID 会改变。 (但我也希望他根据teamID更改为正确的列表视图)

希望您理解,否则请随时询问更多详细信息。

【问题讨论】:

    标签: c# wpf listview mvvm filter


    【解决方案1】:

    绑定到公共属性

      public List<person> SrtedPerson1 { get { return ListView.DataSource = OriginalList.Where(x => x.TeamId==filteringTeamId).ToList(); }} 
    

    让按钮调用 NotifyPropertyChanged("SrtedPerson1");

    仅此一项不会为您提供动态更新 ListView.DataSource = OriginalList.Where(x => x.TeamId==filteringTeamId) 因为它仅返回 iEnumerable。

    在公共场合,我返回 List 就好像你只返回 iEnumerable 它会被 List 包裹起来以用于控件

    【讨论】:

    • 我不知道我不是很擅长这个,但我不应该使用 observableCollections 来代替,所以我不必调用 NotifyPropertyChanged?
    • 这确实有效,但我不喜欢我必须在按钮事件上调用 NotifyPropertyChanged,它变得混乱 imo,我更希望通过 CollectionViewSource 或其他东西得到答案,但是如果没有来一个更好的答案我会让你的答案是正确的。但是我会重写我的问题(因为它更高级,它不使用按钮而是拖放,所以很难跟踪在哪里使用 raisepropertychange 事件)
    • 如果要拥有一个按钮和一个按钮事件,那么 NotifyPropertyChanged 只是一行代码。 OriginalList.Where(x => x.TeamId==filteringTeamId) 的输出不是 ObservableCollection。你说你想要一个按钮来做出改变。 ColletionViewsSource 更多用于静态过滤器。
    • 是2行代码,因为我要升级teamold和teamnew id。否则此人将在列表中出现 2 次​​span>
    • 哦,两行代码,对不起。它有效吗?而且我不知道升级意味着什么。我建议您发布您尝试过的代码。
    【解决方案2】:

    我认为不写一些代码是不可能做到的。

    我会使用CollectionView,而不是将集合直接绑定到ListView。这是 WPF 在内部执行的操作,但是您自己创建它们将可以控制许多事情,例如排序,当然还有过滤器。

    使用CollectionViewSource.GetDefaultView(yourCollection) 创建它们。

    当团队 ID 更改时,应用过滤器并在团队 ID 属性的设置器上执行 CollectionView.Refresh()。如果您没有太多数据,这不是一个大问题。但是在很多数据上Refresh() 三个视图可能有点重。

    编辑:

    我忘了告诉你,你必须将每个 ListView 上的源设置为相应的 CollectionView,但我认为这很明显。

    【讨论】:

    • Oke 稍后会研究这个问题,如何将不同的视图与 1 个 CollectionView 一起使用并将它们绑定到不同的列表视图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 2013-11-28
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多