相关疑难解决方法(0)

在WPF MVVM中打开对话框

我有一个应用程序,需要从用户输入一些信息的按钮打开一个对话框.

目前我这样做(工作正常)

  • 单击按钮会在ViewModel中生成一个命令.
  • ViewModel引发Controller监听的事件.
  • Controller计算出新窗口的细节(即View,ViewModel和model)并打开它(ShowDialog)
  • 当窗口关闭时,Controller将结果添加到eventargs并返回ViewModel
  • ViewModel将信息传递给Model.

有很多步骤,但它们都有意义,并没有太多的打字.

代码看起来像这样(窗口要求输入用户名)

视图模型:

AskUserNameCommand = DelegateCommand(AskUserNameExecute);
...

public event EventHandler<AskUserEventArgs> AskUserName;

void AskUserNameExecute(object arg) {
    var e = new AskUserNameEventArgs();
    AskUserName(this, e);
    mModel.SetUserName(e.UserName);
}
Run Code Online (Sandbox Code Playgroud)

控制器:

mViewModel.AskUserName += (sender,e) => {
    var view = container.Resolve<IAskUserNameView>();
    var model = container.Resolve<IAskUserNameModel>();
    var viewmodel = container.Resolve<IAskUserNameViewModel>(view, model);
    if (dlg.ShowDialog() ?? false)
        e.UserName = model.UserName;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是水平通信如何在MVVM模式中工作.不知何故,让控制器参与模型之间的数据传输似乎是错误的.

我已经查看了中介模式,让模型直接进行通信.不喜欢这个想法,因为它使模型取决于GUI的实现细节.(即如果用文本框替换对话框,模型需要更改)

wpf dialog mvvm

13
推荐指数
2
解决办法
3万
查看次数

标签 统计

dialog ×1

mvvm ×1

wpf ×1