9

バックグラウンド

DataGridいくつかのコードを調査していて、いくつかのバインドされた列を持つを含む xaml に遭遇しました。

Binding="{Binding calc_from}" ....

どこでも検索しましたが、というプロパティを含むクラスはありませんcalc_from。それから私はいくつかのPropertyDescriptorクラスに出くわしました。これが彼らがバインディングを機能させる方法だと思いましたが、その方法を完全には理解していませんでした。

質問

それは何PropertyDescriptorですか?独自の を実装したいのはCustomTypeDescriptorいつですか? また、WPF バインディング メカニズムとどのように関連していますか?

このスレッドで例に出くわしましたが、誰かがそれに光を当ててくれるとうれしいです

4

1 に答える 1

6

PropertyDescriptor とは何ですか? また、何に役立ちますか?

PropertyDescriptor は、主に Binding クラスで内部的に使用されるいくつかのメソッドとプロパティを提供する抽象クラスです。たとえば、WPF にはこれらの「通常の」プロパティと依存関係プロパティがあり、Binding は通常のプロパティに PropertyDescriptor を使用し、PropertyDescriptor から継承してSetValue、GetValue、ResetValueなどの抽象メソッドをオーバーライドする DependencyPropertyDescriptor を使用します。さらに、これらの PropertyDescriptor は、実際のプロパティの所有者クラスに INotifyPropertyChanged が実装されている場合、PropertyChanged イベントをリッスンするメカニズムを提供します。要約すると、WPF でバインディングについて話している場合、片側に PropertyDescriptor があり、反対側には必要なプロパティを提供するモデル クラスがあります。

独自の記述子をいつ実装する必要がありますか?

私が今考えることができる唯一の例は、何らかの理由でエンティティ クラスに INotifyPropertyChanged を実装できず、プロパティを要求または変更するために何らかのポーリングを行う必要がある場合です。 1 秒間に 1/100 ごとにその値を要求するプロパティ。カスタム PropertyDescriptor を使用するよう Binding に指示すると、「PollingBinding」クラスが作成されます。

もう 1 つの例は、「DelayBinding」です。一部の人がインターネットでここに書いたカスタム PropertyDescriptor を Binding と組み合わせて使用​​します。これは、プロパティに値を設定する頻度をカウントし、値を 1/100 で 1000 回設定しようとするとします。 1 秒後には、10 回ごとに実行できるようになるため、わずかな遅延が発生します。

あなたが投稿したリンクの例は、別の良い例です。その質問で、男は、独自のカスタム変更通知を管理する独自のカスタム型記述子を持ちたいと考えていました。そこで便利なのが PropertyDescriptor です。

通常、PropertyDescriptor は Binding で機能します。それだけでかなりダンプです。:)

于 2013-11-05T09:09:21.247 に答える