2009-06-18 22 views
1

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

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

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

+0

子バインディングコード/ xamlを送信できますか? –

+0

この投稿に投稿されました: http://stackoverflow.com/questions/995072/dependency-properties-and-data-context-in-silverlight-3 しかし、私はそれについて何の反応も得られませんでした。十分に問題を十分に説明することはできません)。 – Noam

答えて

0

理想的には、あなたのViewModelには、外側のUserControlのためになるとのViewModelのプロパティには、親コントロールのDataContextのが設定されている場合、それがダウンしpropogatedされていることを、その真のインナー/子供のUserControl

+0

しかし、なぜそれをしたいと思いますか?それは、2つのコントロールを互いに依存させるでしょう。つまり、私はUIロジックをVMに入れます。私は、デザイナーがコンロールを「ミックス・アンド・マッチ」できるようにしたいと思います。 – Noam

0

のDataContextのだろうすべての子コントロール。しかし、子コントロールには、独自のDataContext(これはあなたの例で行っているようです)を設定することによって、この動作をオーバーライドするオプションがあります。したがって、プリファレンスのルールによって、子コントロールのDataContextにはより多くのプリファレンスが与えられ、したがって親のものよりも優先されます。また、子のDataContextは最初に設定された後に変更されないため、DPは呼び出されません。

+0

私はあなたの意見をよく理解していません。 DPが呼び出されない理由を説明しません。データコンテキストとDPとは何が関係していますか? – Noam

0

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

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

私は要素から要素へのバインディングを使用して問題を解決し、それを動作させました。 SLチームがこの動きを変えることを願っています。

関連する問題