2

依存関係プロパティを理解しようと頭を悩ませています。

私が持っているクエリは次のとおりです。

Depenedency プロパティは static として宣言されているため、static はクラス レベル プロパティを意味し、単一のインスタンスのみが作成され、すべてのオブジェクトが同じオブジェクトを共有します。

ユーザー コントロールがあり、依存関係プロパティ IsHighlighted をそのユーザー コントロールに追加しました。この依存関係プロパティは、いくつかのビュー モデル プロパティにバインドされており、依存関係プロパティの値を変更するためのコールバックを登録しました。したがって、誰かがビューモデルのプロパティを変更するとすぐに、依存関係プロパティのコールバックが呼び出され、ブール値として true の場合はアニメーションが開始されます。

ここで、5 つのオブジェクト ビューを作成しました。object1 の viewmodel プロパティを true に設定すると、object1 ではなく最後のノード object5 に対してアニメーションが実行されます。ビュー モデルのプロパティは静的ではありません。

オブジェクトごとに依存関係プロパティが作成されるか、すべてのオブジェクトに対して単一になるか混乱しています。

すべてのオブジェクトに対して単一の場合、ユーザー コントロールの通常の CLR プロパティでは変更ハンドラーが呼び出されないため、シミュレーションを実行する必要があるユーザー コントロール プロパティの変更を追跡する方法は何でしょうか。

概要: 依存関係プロパティは、クラス レベルまたはオブジェクト レベルで作成されます。静的として宣言されているため、クラス レベルで作成された場合、オブジェクト レベル (非静的) のプロパティを作成する方法はありますが、通常の CLR プロパティの値変更コールバックはありません。だからそれを行う方法。

4

1 に答える 1

0

依存関係プロパティをどのように定義したかを見ると、それは通常の静的プロパティではなく、単純な通常の静的プロパティで行うように純粋な値を割り当てるのではなく、メタデータを設定することによってプロパティを記述することにすぐに気付くでしょう。そのメタデータは DependencyObjects 内で使用されています (wpf のすべてのコントロールは、UserControls を含む DependencyObject から継承されます)。

各 DependencyObject がそのメタデータに対して行うことは、依存関係プロパティの独自の値を管理することです。

これが、object5 がすべてのオブジェクトではなく値のみを変更した方法です。

写真がもう少し明確になったことを願っています。

ところで、ユーザー nit が提供したリンクも参照します。

WPF の依存関係プロパティが静的でなければならない理由

それをチェックしてください。

于 2013-11-09T17:16:50.203 に答える