gpt4 book ai didi

wpf - 可观察绑定(bind)到同一集合的两个 ICollectionView

转载 作者:行者123 更新时间:2023-12-02 02:02:32 25 4
gpt4 key购买 nike

因此,我以 MVVM 的方式使用 WPF,使用 Caliburn.Micro 作为框架。

我有一个带有 ObservableCollection 的 ViewModel,我需要用不同的排序、过滤和分组显示两次。

这个看似简单的操作让我有点吃力。我通常会这样做:

private ICollectionView _datagridCollectionView;
public ICollectionView DatagridCollectionView
{
get
{
if (this._datagridCollectionView == null)
{
this._datagridCollectionView = CollectionViewSource.GetDefaultView(this.Items);
using (this._datagridCollectionView.DeferRefresh())
{
this._datagridCollectionView.SortDescriptions.Clear();
this._datagridCollectionView.SortDescriptions.Add(new SortDescription("SortingProperty", ListSortDirection.Ascending));
}
}
return this._datagridCollectionView;
}
}

它工作正常,可以排序并且可以观察到。

所以我以同样的方式添加了第二个 View :

private ICollectionView _chartCollectionView;
public ICollectionView ChartCollectionView
{
get
{
if (this._chartCollectionView == null)
{
this._chartCollectionView = CollectionViewSource.GetDefaultView(this.Items);
using (this._chartCollectionView.DeferRefresh())
{
this._chartCollectionView.Filter = (p) => { return p.IsChartable; };
}
}
return this._chartCollectionView;
}
}

现在的问题是(可能是因为我访问了默认 View ,因此具有相同的引用)所有排序/过滤都是对两个 View 完成的。

所以我尝试创建 ICollectionView 的新实例,但不应使用 CollectionView 并且 ListCollectionView 是为列表创建的,而不是 IEnumarbles 所以即使我使用 ToList() 方法, View 也不再可观察。

执行此操作的正确方法是什么?

最佳答案

您应该使用 CollectionView 类文档的备注部分中概述的方法:

To create a collection view for a collection that only implements IEnumerable, create a CollectionViewSource object, add your collection to the Source property, and get the collection view from the View property.

此方法等同于 CollectionViewSource.GetDefaultView,即您将使用检索到的 View 相同:

  • 你将它绑定(bind)到 UI
  • 你用它来过滤
  • 你用它来排序

关于wpf - 可观察绑定(bind)到同一集合的两个 ICollectionView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16521094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com