1

RadWindow(基本的にはChildWindow)を備えた機能的なMVVMパターン化SLアプリがあり、ShowDialogを使用してウィンドウを表示するビューのコードビハインドを削除したいと思います。それが役立つ場合は、メインビューとウィンドウの両方が同じViewModelにバインドされます。

ボタンには、設定状態を処理するためのMVVMLight RelayCommandを使用するViewModelコマンドと、ビューのイベントハンドラーの両方があります。

究極のソリューション/パターンは20回以上再利用されるため、コードビハインドよりも優れたものがあれば素晴らしいでしょう。

考え?

private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
{
    var window = new RadWindowTest.Controls.ChildWindow1();

    window.Closed += new System.EventHandler<Telerik.Windows.Controls.WindowClosedEventArgs>(window_Closed);

    window.ShowDialog();

}
4

1 に答える 1

0

この場合、DialogServiceを実装することをお勧めします。ビューモデルに注入できるこのサービス。テストでは、ビューに依存しないインスタンスを注入する必要があるため、テスト容易性が維持されます。ViewModelLocatorを使用して、このサービスをアプリケーションで利用できるようにすることができます。

もう1つのアプローチは、ダイアログを表示できるインターフェイスを実装するViewBaseクラスを実装することです。このインターフェイスは、ViewModelがダイアログを表示するために使用するようになりました。再度テストするには、インターフェースの別の実装を提供する必要があります。サンプルはここにあります。

どちらのアイデアも、ダイアログを表示する関数をファクタリングするという同じ概念を中心に展開しています。ViewとViewModelを厳密に分離するには、ViewModelがどのダイアログを表示する必要があるかを指定する方法と、ダイアログの結果またはダイアログモデルが呼び出し元のViewModelにどのように返されるかを考慮する必要があります。

どちらのアプローチが優れているかは、あなたの判断に委ねられています。個人的には、共通の基本クラスからビューを継承する必要がないため、最初のアプローチを好みます。

PS:コマンドを使用して、ダイアログを表示するViewModel内のポイントに到達します。ダイアログサービスを使用する場合、コードビハインドは必要ありません。

于 2011-06-28T17:27:31.380 に答える