2012-03-23 6 views
3

あなたのためのもう一つのWPF質問。WPFで同じ依存関係プロパティに複数のバインディングを追加する方法は?

私は、テキストボックスとボタンを含むユーザーコントロールを持っています。ボタンは「フォルダ選択」ダイアログを開きます。ユーザーがフォルダを選択すると、ユーザーが選択したパスがテキストボックスに表示されます。それはうまく動作します。

ユーザーコントロールの内部には、Pathという名前の依存プロパティがあります。ユーザーが選択すると、Pathが更新され、バインドされたテキストボックスも更新されます。それは素晴らしい作品です。

親ビューでは、このPath値が何であるかを知る必要があります。ここから何をするのですか?

私は、Pathという名前の親ビューモデルにプロパティを追加する必要があると仮定します。簡単に言えば、それは何に結びついているのですか?ユーザーコントロールのパス依存プロパティ親のView Modelとユーザーコントロールの両方のテキストボックスに同時にバインドできますか?私は、ユーザーコントロールを追加しようとした

は成功せず、属性:

<v:MyControl Path="{Binding ViewModels:MyViewModel.Path}" ... />

エラーなし、それだけでビューモデルを更新しませんでした。このアプローチが実現可能であれば、より多くのコードを投稿することができます。

enter image description here

+1

はい、試してみませんか? – Phil

+0

ありがとう@Phil。私が試したことを追加しましたが、このアプローチについては何かが間違っていると感じましたので、これが今後の合理的なアプローチであるかどうか尋ねると思いました。 – jglouie

+1

ところで、ViewModelのプロパティを静的にするのは良い考えではないでしょう。表示されている場合、単一のプロセスでビューモデルの1つのインスタンスに制限されます。あなたの親ビューの 'DataContext'がviewmodelにも設定されていれば、'

答えて

3

依存関係プロパティはい、複数のバインディングのソースとすることができます。ビューについてのみ言えば、5つのテキストボックスがその値に結びついているマスタースライダを持つことができます。それはうまくいくでしょう。

MVVMに居住しているので、ビューモデルの変更通知プロパティーを単一ソース真実としてこの画面に使用するほうがおそらく多分です。ユーザーコントロールはこのプロパティに書き込みを行い、親ビューはそれから単純に読み取ります。

経験則:複数のビューレベルコンポーネントがプロパティにアクセスする必要がある場合は、両方をビューモデルにバインドし、お互いにバインドしないでください。

+0

この場合、ユーザーコントロール(これは他のビューで使用されています)が親に強く結合されていませんか? – jglouie

+0

読んで、私の2番目の段落は、それをしないように指示します。 :) –

+0

申し訳ありません、私はフォローしていません。ユーザーコントロールが親のビューモデルのプロパティにバインドする必要がある場合、そのユーザーコントロールは親について知っている必要があります。 – jglouie

4

プロパティは1つのバインディングのみのターゲットにすることができますが、必要な数のバインディングのソース(つまり、値の元来の場所)にすることができます。 UserControlPathプロパティへの親ビュー。

関連する問題