2

Silverlight 依存関係プロパティ システムの低レベルの詳細を理解しようとしています。

DependencyObject には明示的な DataContext プロパティや、親の概念さえないことがわかりました。

ただし、DependencyObject から派生する Behavior クラスでは、バインディングがそれ自体のバインディングのソースとしてアタッチされているものの DataContext を使用します。

私の質問は次のとおりです: DependencyObject からクラスを派生させて、バインディングのソースで使用する他のオブジェクトを何らかの方法で決定できますか? またはもっと明確に: Behavior クラスのようなものを実装するには?

4

1 に答える 1

2

DataContext は FrameworkElement プロパティです。親子プロパティ継承の形式を使用することで、バインディング システムは、子オブジェクト (ターゲット プロパティを持つ) が FrameworkElement ではなく、したがって独自の DataContext 値を保持していない場合でも、親要素に存在する DataContext を解決できます。 . ただし、DataContext を設定および保持するには、その親要素が FrameworkElement である必要があります。または、null DataContext で機能できるようにバインディングを定義する必要があります。

Silverlight 4 以降では、次の場合にターゲットを DependencyObject の DependencyProperty にすることもできます。

  • DependencyObject は、FrameworkElement のプロパティの値です。

  • DependencyObject は、FrameworkElement プロパティ (たとえば、Resources プロパティ) の値であるコレクション内にあります。

  • DependencyObject は DependencyObjectCollection にあります。

Silverlight 5 以降では、ターゲットを Style 内の Setter の Value プロパティにすることもできます。例については、Style クラスの概要を参照してください。

したがって、あなたの質問に対する答えは次のとおりです。はい、クラスを DependencyObject から派生させることができ、その依存関係プロパティのバインディングは、上記の条件が満たされているか、バインディングが DataContext (ElementName または Source プロパティが使用されている) に依存していない限り機能します。

于 2012-06-21T21:04:56.363 に答える