WPF MVVMおよび依存関係プロパティを含むネストされたビュー
-
05-07-2019 - |
質問
Xamlで子ビューを定義する親ビューがあります。子ビューには、親ビューのViewModelにバインドされた DependencyProperty
があります。ただし、その値は子ビューのViewModelでも必要です。
<custom:Parent>
<custom:Child ChildId="{Binding ParentFooId}" ... />
</custom:Parent>
ChildId
は、 ChildView
コントロールの依存関係プロパティとして実装されます。 ChildViewModel
に ParentFooId
が必要な場合、MVVMを取得する適切な方法は何ですか?
ChildView
の DataContext
を ChildViewModel
にキャストし、 OnChildIdChanged に値を設定したくない
ChildView
のcode>ハンドラー。それは私にはあまりMVVMっぽくないようです。
私が考えた他の代替手段は、値を持つ新しい ChildViewModel
を作成し、それを OnParentFooIdChanged
イベントで DataContext
として設定することでした( ParentViewModel
);しかし、ViewModelsはViewに気付かないようになっている(したがって、 DataContext
sについて何も知らない)ので、それはまったく正しくないようです。
明らかな何かを見逃しているようです...
解決
質問を正しく理解できれば、親ビューモデル内に子ビューモデルを作成し、親ビューモデルへの参照を渡し、保持するだけです。これにより、子ビューモデルから親ビューモデルのプロパティを参照し、子ビューのいずれかにバインドできます。
他のヒント
単に依存関係プロパティからビューモデルにデータを渡そうとする場合、PropertyChangedCallbackイベントを使用します。変更したデータをビューモデルに送信するハンドラーを追加します。あなたの意図を誤解しているかもしれません。