3

MVVMソリューションを探しています。コントロールはビューで使用されます(Vと呼びます)。コントロールにはメソッドFoo()があります。その操作はコントロールのどのイベントにも接続されていないため、そのメソッドをイベントから呼び出すことはできません。ViewModelからこのメソッドを呼び出す必要がありますが、もちろんViewModelにはビューに関する知識がありません。コントロールを拡張してMVVM準拠のV.Foo()の呼び出しを有効にする方法について何かアイデアはありますか?

4

4 に答える 4

2

受け入れられなかった質問を確認したところ、これが見つかりました。コントロールにICommanddependecyプロパティを
追加することで問題を解決したことを覚えています。これは、更新なしでOneWayToSourceを使用してバインドされます。Execute()呼び出しは、コントロールのメソッドを呼び出します。

于 2014-10-14T12:05:58.227 に答える
0

「もちろん、ViewModelにはビューに関する知識がありません」?

MVVMをドーピングしている場合、ViewModelViewを認識している必要があります。

RoutedCommandまたはRelayCommandを調べる必要があるかもしれません

于 2012-11-18T09:51:16.160 に答える
0

ビューモデルで、操作を実行するようにビューに通知するブール値を作成します。コントロールにアクセスできる場合は、前述のブール値にバインドできる依存関係プロパティを作成し、変更時にメソッドを呼び出します。依存関係プロパティを作成する機能がない場合は、作業を実行する動作を作成します。

于 2012-11-18T10:25:12.120 に答える
0

このような場合、私は通常、Messenger(MVVMLightなど)/ Mediator / EventAggregator(Prismなど)のパターンを使用して、メソッドを実行する必要があることをビューに通知します。このようなパターンでは、基本的に、誰がメッセージを処理するかを知らなくても、VMから一部の受信者(この場合はビュー)にメッセージを送信します。したがって、ビューモデルはビューを知る必要はありません。

さらに、このパターンを使用して、送信者が知らないうちに、多くの受信者を処理できる一般的なブロードキャストメッセージを作成できます。

例:

PS:

このようなアプローチには多くの有効なケースがあります。ただし、別の解決策がある場合は、ViewModelからビューを呼び出すことは避ける必要があると言わなければなりません。

ビューモデルからのビューへのアクセスを批判する人へ:MVVMは、ルールを強制するのではなく、代替手段を提供することによってユーザーに権限を与えることを目的としていることに注意してください。

于 2012-11-18T11:34:41.740 に答える