2

私の知る限り、DataContext クラスを作成する一般的な方法は 2 つあります。1 つは INotifyPropertyChanged を実装する方法で、もう 1 つは DependencyObject から派生させる方法です。

多くの人が、INotifyPropertyChanged を実装する最初の方法の方が簡単だと言いますが、私も同意します。

しかし、INotifyPropertyChanged を実装することさえ単純ではなく、非常に面倒だと思うので、私は完全に同意しません。なぜなら、プロパティのすべてのセッター関数を書き直してイベントを発生させる必要があるからです。それはほとんどの場合、コピー & ペースト & 変更であり、私はこれが嫌いです。 . エレガントではありません。

だから私は興味があります.DataContextを作成する他の方法はありますか?たとえば、あるクラスから派生するだけですべてが完了しますか?

datacontext がコレクションであるかどうかはわかっています。それを行うには非常に簡単な方法があります。ObservableCollection<> から継承するだけです。これは非常に良い解決策だと思います。しかし、他のクラスはどうですか?

サードパーティのフレームワーク?

4

3 に答える 3

1

Postsharpのような AOP フレームワークを使用すると、属性をクラスに簡単に配置でき、すべてのINotifyPropertyChangedグルー コードを生成できます。

于 2013-09-12T02:38:02.480 に答える
1

これは一般的にはお勧めしませんが、ご存じない場合に備えて言及しておきます。データ バインディングを機能させるために依存関係プロパティや INotifyPropertyChanged を実際に実装する必要はありません。INotifyPropertyChanged を実装しないクラスが所有する非依存プロパティにバインドすると、WPF はPropertyDescriptor.AddValueChangedを介して自動的にリッスンします。

これが推奨されない理由は、PropertyDescriptor がグローバルであるため、それとリスニング ターゲットの間の参照が永続的であり、メモリ リークが発生するためです。このページを参照してください: http://support.microsoft.com/kb/938416

ただし、デモ/テスト アプリをすぐに起動して実行したいだけの場合は、これで問題なく動作します。

于 2013-09-12T03:46:20.983 に答える