依存関係プロパティとは何ですか?


回答:


94

DependencyプロパティはDependencyObjectから派生したクラスのプロパティであり、それらはバッキングフィールドを使用して値を格納するだけでなく、DependencyObjectでいくつかのヘルパーメソッドを使用するという点で特別です。

それらの最も優れた点は、データバインディングのすべての組み込みが組み込まれていることです。何かをバインドすると、変更時に通知されます。


36
それでも、依存関係プロパティが実行できること、または依存関係プロパティが存在する理由はほとんどわかりません。あなたはそれらの最も価値のある特性、要素ツリーの上の値解決については何も述べていません。
ProfK 2013年

こんにちは@MattHamilton回答ありがとうございます-「DependencyObjectでいくつかのヘルパーメソッドを使用する」とはどういう意味ですか?
BKSpurgeon 2016

2
@BKSpurgeon DependencyObjectには、バッキングフィールドを使用するのではなく、依存関係プロパティの値を保存/読み取るために呼び出す「SetValue」や「GetValue」などのいくつかのメソッドがあります。
Matt Hamilton

91

私が役立つとよく書いたと思う唯一の説明はこれです:http : //www.wpftutorial.net/dependencyproperties.html

基本的に、DependencyPropertiesは通常のプロパティとは異なり、クラスのフィールドのセッター/ゲッターであるだけでなく、実行時に動的に実際の値を取得します。SetValue()DP の方法は非常に単純で、プロパティのローカル値を指定した値に設定します。ただし、GetValue()DependencyPropertyからしようとすると、最初にローカル値が検索されます。存在しない場合(通常のプロパティとは異なり、DependencyPropertiesで実行可能)、そのような値が見つかるまで論理UIツリーを上に進みます。フレームワークがローカル値を見つけることなくツリーの最上位に到達した場合、フレームワークは事前定義されたデフォルト値をプロパティの値として使用します。

ユーザーが明示的に設定した値のみがローカルに格納されるため、このメソッドを使用すると、DependencyPropertiesが通常のプロパティよりも少ないメモリを消費できます。

また、前述のように、DependencyPropertiesを使用すると、XAMLコードでそれらにバインドして、通常のプロパティでは許可されていないトリガーを設定することもできます。

私はいくつかの曖昧さを解消できたと思います:)


2
「添付プロパティ」とは何ですか?
Paul-Sebastian Manole 2013

12
添付プロパティは、宣言されている現在のアイテムに属していないが、別のオブジェクトに影響を与えるプロパティです。たとえば、Grid.Row="1"onはButtonそれを親の行#2に設定しますGrid(行がゼロベースであるため)、RowDependencyPropertyはGridオブジェクトに属します。
ジョナサンペリー

2
と言ったときDependencyProperties also allow us to bind to them in the XAML code and set triggers on them, which on regular properties is not allowed、XAMLでのバインドとトリガーの設定の両方、またはトリガーの設定だけが許可されていないという意味ですか?フォローアップに感謝し、物事をより明確にするのを手伝ってください!
Paul-Sebastian Manole 2013

@ Paul-SebastianManole DataTriggersは、通常のプロパティでも機能します。あなたが持っていると言うValue値が0にプロパティ(未DP)を、あなたがたときに、あなたのビューが何かをしたいValue1への変更は、あなたが使用してそうすることができますDataTriggerし、設定Binding={Binding Path=Value, Value=1}
ジョナサン・ペリー

36

http://techpunch.wordpress.com/2008/09/25/wpf-wf-what-is-a-dependency-property/は、WFとWPFの両方のコンテキストにおける依存関係プロパティの適切な説明を提供します。

抜粋:

重要なポイント–依存関係プロパティの値が解決される

依存関係プロパティの最終的な目標は、他のプロパティと同様に、状態を管理することです。ただし、通常の.Netプロパティとは異なり、ローカルプロパティの値はインスタンス変数に格納されません。

代わりに、依存関係プロパティは依存関係プロパティフレームワークに登録され、基になるプロパティ値が解決されます。つまり、値は、プロパティ登録で定義されたルールに基づいて依存関係プロパティフレームワークによって決定されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.