はここMVVM WPF/SLの開発標的にシナリオの例です:MVVMパターンでWPFおよびSLの変更通知伝播を実装するにはどうすればよいですか?
- ビューデータはモデルプロパティ 「ターゲット」を表示するバインドを
- 「ターゲット」は、「データ」と呼ばれるオブジェクトのフィールドを公開しています「Original」が変更されたときにローカルモデル「Original」にある
- が存在する場合は、通知モデルをビューモデルに通知し、その変更通知をビューに伝播する必要があります。
ここに私が思いついた解決策がありますが、私はそれほど多くを好きではありません。私は他のアイデアを探しています。私たちは何か堅実なものを思いつきます。マイクロソフトは、MVVM開発のためのより良いツールのためにWPF/SL拡張で.NET 5をリリースする予定です。
ここで問題は、「この問題を解決するために何をしましたか、それがどのようにあなたのために働いたのですか?
オプション1.提案
:
は、それがその気にプロパティの文字列値を監視データのPropertyChangedイベントにハンドラをアタッチが変わったかもしれない、と昇給適切な通知。
なぜ私はそれを好きではない:新しいソースへのデータの変更は、イベントが登録/国連登録されなければならない場合
変更は、バブルは当然、オブジェクトを明示的に、注目されている必要がありません。
のはなぜな種類のそれのように:
私は変更のプロパゲーションを明示的に制御を取得し、私はそのような依存性などのアプリケーションのより高いレベルで属している任意の種類を使用する必要はありません。
オプション2
提案:
nameプロパティ名を使用して、すべてのプロパティ間でイベントを再度発生させPropertyChangedイベントは、のデータにハンドラーを接続します。
なぜ私はそれを好きではない:
は、これは本質的にオプション1と同じですが、あまりインテリジェントな、と彼らは同じでなければならないとして、私のプロパティ名を変更することはありませんし、私を強制的にデータなぜな種類のそれのような
のプロパティ名:
それはセットアップが非常に簡単だと私はそれについて考える必要はありません...その後、再び、私は考えるようにしようとした場合、名前を物に変更する私は自分の足で撃って、それから考えなければならない!
オプション3
提案:
は依存オブジェクトから私のビューモデルを継承し、直接変更の結合源を通知します。私はそれを好きではないのはなぜ
は:
を私も依存プロパティ/オブジェクトは、これを行うことができ、100%わからないんだけど、に見てちょうど考えられていました。また、私は個人的に、DepobのようなWPF/SL型がビューモデルレベルに属しているとは感じていません。
I種類のそれのような理由:それは私が求めてい機能がある場合
が、それは良い答えです!それは厄介なレイヤリングの問題です。
オプション4.
提案:
は、リンクされたパイプラインを通じて、すべてをpropogateするタスクのParallelsデータフロー図書館のオフに基づいて一貫したエージェントのメッセージングシステムを使用してください。
なぜ私はそれを好きではない:
私はこれを試したことがない、と何とか私はそれが欠けていることになると思い、プラスそれはすべての方法の周りに完全に異なった私のコードについて考えるために私を必要とします。
なぜな種類のそれのように:
それは私がプッシュベースのデータモデルといくつかの非常に楽しい操作を行うにできるようにして、個人ビューモデルのプロパティを変更するには、検証とセッターとしてActionBlocksを使用しての可能性について持っていますPropertyChanged通知を明示的に制御します。
あなたのモデルから興味のある人にメッセージを送信していますか? –
@chibacity、yes。 – devuxer
@ダンそれで本質的にモデルはメッセージビューをすることができます。それはMVVMレイヤーを破壊します。 –