だから私はフレームワークとして使用WPF
するMVVM
方法で使用Caliburn.Micro
しています。
異なる並べ替え、フィルタリング、およびグループ化で 2 回表示する必要がある 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;
}
}
そして、それはうまく機能し、ソートされ、観察可能です。
そこで、同じ方法で 2 番目のビューを追加しました。
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()
ビューはもはや観察できません。
これを行う適切な方法は何ですか?