私は WPF/MVVM が初めてで、私が見つけた例は私が直面している問題をカバーしていないようです。
かなり複雑なビジネス構成オブジェクトを管理するための画面があります。MVVMでは、これは次のものが必要であることを意味すると思います:
- ゼロに近いロジックを持つ XAML ビュー
- 画面ロジックを持つ ViewModel クラス
- 私の通常のビジネス クラスはモデルの役割を果たし、すべてのビジネス ロジックを備えています。
私の状況では、ビジネス クラスの fieldA を変更すると、fieldB の値を変更したり、サブオブジェクトのリスト全体を入力したりするなど、さまざまな副作用が生じる可能性があるというビジネス ルールがあります。
私は間違っているかもしれませんが、これらのルールは実際には画面に関するものではなく、エンティティに関するものであるため、これらのルールをビジネス クラスにカプセル化しておく必要があると思います。
当然、これらの副作用はすぐに画面に戻る必要があります。
したがって、ユーザーの観点からは、fieldA を編集すると、View で更新された fieldB が表示される場合があります。
View から ViewModel にデータバインドする方法を理解しています。
しかし、私の場合、データバインディングの 2 つの層が必要なようです。1 つは View と ViewModel の間、もう 1 つは ViewModel と Model の間です。
基本的に同じ問題が 2 回発生したことを考えると、1 つの解決策を適用する必要があると思います。そのため、Model クラスを DependencyObject にし、そのプロパティを DependencyProperties にしました。
たとえば、fieldA を見ると、3 つのレイヤーすべてに表示されます。
- ViewModel.FieldA にデータバインドされたビジュアル コンポーネントとして表示します。例: text="{Binding FieldA, Mode=TwoWay}"
- ビューに「上向き」にバインドされ、モデルに「下向き」にバインドされた DependencyProperty としての ViewModel
- DependencyProperty としてモデル化する
パート 2 をスキップして View XAML をビジネス オブジェクトに直接結合することは避けたいと思います。これは、パターンのクリーンなアプリケーションとは思えません。おそらくそれは見当違いです。
基本的に、ViewModel に「パススルー DependencyProperty」が必要なようです。
私の質問:
- これは正しい一般的なアプローチですか、それとも私はそれについてすべて間違っていると考えていますか?
- このパススルー アプローチを使用した例はありますか?
- ViewModel と Model FieldA DependencyProperties の間のパススルー バインディングを作成する適切な方法のコード例を教えてください。