4

列挙型を ItemsSource などにバインドする場合、バインディングは列挙型の既定のビューを使用します。これは、次のコードを使用して取得できることがわかっています...

var defaultView = CollectionViewSource.GetDefaultView(someCollection);

これは私たちにとって非常にうまく機能し、たとえば、さまざまなコレクションのデフォルト ビューに並べ替え機能を追加できるようになりました。

ただし、適切に機能するために特殊な ListCollectionView サブクラスを必要とする特殊な Collection クラスがあります。とはいえ、誰かがコレクションに直接バインドしたときに返されるように、デフォルトのビューを変更するにはどうすればよいでしょうか?

回避策として、カスタム ListCollectionView を保持する MainView という新しいプロパティを作成し、ItemsSource などをそれにバインドしますが、これは、コレクションのコンシューマーに、コレクションに直接バインドするのではなく、直接バインドするように明示的に指示する必要があることを意味します。 MainView プロパティを使用しないと、既定のビューが取得されます。標準はコレクションに直接バインドするだけであることを考慮すると、これは回避しようとしている潜在的な問題です。

繰り返しになりますが、独自の ListCollectionView サブクラスをカスタム コレクションの既定のビューとして指定するにはどうすればよいでしょうか。

4

1 に答える 1

9

コレクションで、インターフェイス ICollectionViewFactory を実装します。次に例を示します。

public class MyCollection : ObservableCollection<MyItem>, ICollectionViewFactory
{
    public ICollectionView CreateView()
    {
        return new MyListCollectionView(this);
    }
}
于 2013-06-21T16:44:34.350 に答える