.Net WPF dependencyProperties がクラスの静的メンバーである必要があるのはなぜですか

StackOverflow https://stackoverflow.com/questions/36682

  •  09-06-2019
  •  | 
  •  

質問

最近はWPFを勉強しています。今日は、.Net 依存関係プロパティに関して新しいものを発見しました。彼らがテーブルにもたらすものは、

  • コールバックのサポート (検証、変更など)
  • プロパティの継承
  • 添付プロパティ

とりわけ。

しかし、ここでの私の質問は、なぜ包含クラスで static として宣言する必要があるのか​​ということです。推奨される方法は、インスタンスの「ラッパー」プロパティを追加することです。なぜ ?

編集:@Matt、しかし、それはプロパティ値がインスタンス間で共有されることも義務付けているのではないでしょうか - もちろんそれが派生値である場合を除きますか?

役に立ちましたか?

解決

この要件の背後には 2 つの理由があると考えられます。

  1. 同じDPを重複して登録することはできません。この制約に従うには、静的変数を使用する必要があります。静的変数は 1 回だけ初期化されるため、DP は 1 回だけ登録されます。
  2. DP は、クラス (その DB を使用する) インスタンスが作成される前に登録する必要があります。

他のヒント

WPF の主要な最適化により、依存関係プロパティは静的になります。WPF のコントロールの多くには、数百ではないにしても、数十のプロパティがあります。これらのクラスのプロパティのほとんどはデフォルト値に設定されています。DP がインスタンス プロパティの場合、作成するすべてのオブジェクトのすべてのプロパティにメモリを割り当てる必要があります。DP は静的であるため、WPF は各プロパティのメモリ使用量をより効果的に管理できます。

登録する DP にデフォルト値を指定する必要がある理由は、プロパティがデフォルト値に設定されている場合、作成したプロパティを含むオブジェクトの数に関係なく、WPF がプロパティに余分なメモリを割り当てないようにするためです。

依存関係プロパティの静的インスタンスが必要な理由は、まさにそのように設計されているからだと思います。静的ビットには、すべてのプロパティのメタデータ (デフォルト値、所有者の種類 (添付プロパティの場合に便利) など、変更時のコールバック メソッドなど) が保持されます。これらのものをインスタンスごとではなく、クラスのすべてのインスタンスにわたって静的に保存するのが合理的です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top