3

だから私はフレームワークとして使用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()ビューはもはや観察できません。

これを行う適切な方法は何ですか?

4

1 に答える 1