1

クラスをデータ コンテキスト (MVVM パターン) として使用するカスタム Silverlight 3 コントロールを作成しました。XAML を使用して、このコントロールを別のコントロール (フォーム) に配置したいと考えています。子コントロールは、XAML で設定すると詳細情報を表示する依存関係プロパティを公開します。

たとえば、子コントロールが注文の詳細データを表示し、それをユーザーの注文を表示するフォームに配置したいとします。注文を選択すると、親コントロール (注文リスト) で選択された項目の値が子コントロールにデータ バインドされ、詳細が表示されます。

問題は、子コントロールの依存関係プロパティの OnChanged ハンドラーが呼び出されないことです。子にデータ コンテキストを設定しない場合 (親のデータ コンテキストを使用する場合) はすべて正常に動作しますが、別のデータ コンテキストを設定すると失敗します。

4

3 に答える 3

0

親コントロールの DataContext が設定されると、そのすべての子コントロールに伝達されるのは事実です。ただし、子コントロールには、独自の DataContext を設定することでこの動作をオーバーライドするオプションがあります (例ではこれを行っているようです)。したがって、設定の規則により、子コントロールの DataContext にはよ​​り多くの設定が与えられ、親の設定をオーバーライドします。また、子の DataContext は最初に設定された後は変更されないため、DP が呼び出されることはありません。

于 2009-06-18T19:02:36.797 に答える
0

だから私はこれについてもう少し考え、何が起こっているのか理解していますが、それは非常に紛らわしく、正しく行われていないと思います. メイン ページのコントロールでデータ バインディングを行う場合、そのページのコンテキストを使用してバインディングを行う必要があります。また、コントロール内で行うバインディングでは、コントロールのコンテキストを使用する必要があります。

バインディング式をどこに置いても、コントロールのコンテキストが使用されるようになりました (E2E バインディングを行っていない限り、メイン ページのコンテキストを使用します)。それは私にはばかげています。しかし、少なくとも私は今それを理解しています。

Element to Element binding を使用して問題を解決し、機能させました。SL チームがこの動作を変更することを願っています。

于 2009-07-06T20:02:11.000 に答える