所以我正在使用作为框架WPF
的MVVM
方式。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;
}
}
它工作正常,它排序并且它是可观察的。
所以我以同样的方式添加了第二个视图:
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;
}
}
现在的问题是(可能是因为我访问默认视图并因此具有相同的引用)所有排序/过滤都是对两个视图进行的。
所以我尝试做新的实例,ICollectionView
但CollectionView
不应该被使用,并且ListCollectionView
是为列表制作的,IEnumarbles
所以即使我使用ToList()
视图不再可观察的方法,我也不会这样做。
这样做的正确方法是什么?