2

私はWPF + MVVMを使い始めたばかりです。基本的なコツはつかめたと思います。ただし、質問があります (愚かな質問ではないことを願っています)。

顧客のリストを表示するビューがあります。これらの顧客の 1 人を編集したいと考えています。List ViewModel とは別の ViewModel を使用して編集ビューを読み込むにはどうすればよいですか。

これはかなり標準的なシナリオであり、かなり簡単な答えであると確信していますが、グーグルでかなりの時間を費やしましたが、具体的なものは何も思いつきません. 誰かが簡単な例の方向に私を向けることができますか?

私が間違っていて簡単ではない場合、この種のことを行う最善の方法は何ですか?

4

1 に答える 1

3

これを行う一般的な方法 (MVVM だけでなく、よく適用されます) は、リスト VM にいわゆるサービスへのアクセスを許可することです。次に、このサービスは、エディターの作成と表示を実装します (おそらく、さらに別のサービスを使用します)。

例:

/// Always use an interface for the service: it will make it a breeze
/// to test your VM as it decouples it from the actual service implmentation(s)
interface ICustomerEditorService
{
  /// Do whatever needed to get the user to edit the Customer passed in,
  /// and return the updated one or null if nothing changed.
  /// Customer here is likeyly your customer model, or whatever is neede
  /// to represent the editable data
  Customer EditCustomer( Customer toEdit );
}

class ListViewModel
{
  /// service gets passed to constructor, you can use dependency injection
  /// like MEF to get this handled easily;
  /// when testing, pass a mock here
  public ListViewModel( ...., ICustomerEditorService editorService )
  {
    ....
  }

  private void OnEditButtonClicked()
  {
    var editedCustomer = editorService.EditCustomer( GetSelectedCustomer() );
    //do stuff with editedCustomer
  }
}

/// A real implementation
class CustomerEditorService
{
  public Customer EditCustomer( Customer toEdit )
  {
    var vm = new CustomerEditorViewModel( toEdit );
    var view = new CustomerEditorView( vm );
    if( myWindowManager.ShowDialog( view ) == Cancel )
      return null;
    return vm.Customer;
  } 
}
于 2012-04-10T19:06:44.183 に答える