我有一个应用程序需要从用户输入某些信息的按钮打开一个对话框。WPF MVVM中的打开对话框
在我不喜欢这样的时刻(工作正常)
- 点击该按钮生成视图模型的命令。
- ViewModel引发Controller侦听的事件。
- 该控制器采用了新窗口的细节(即查看,视图模型&模型)并打开它(的ShowDialog)
- 当窗口关闭时,控制器将结果以EventArgs的并返回到视图模型
- ViewModel将信息传递给模型。
有很多步骤,但他们都有道理,没有太多的打字。
的代码看起来是这样的(窗口询问用户名)
视图模型:
AskUserNameCommand = DelegateCommand(AskUserNameExecute);
...
public event EventHandler<AskUserEventArgs> AskUserName;
void AskUserNameExecute(object arg) {
var e = new AskUserNameEventArgs();
AskUserName(this, e);
mModel.SetUserName(e.UserName);
}
控制器:
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;
}
我的问题是横向沟通中是如何工作的MVVM模式。 不知怎的,让控制器参与模型之间的数据传输似乎是错误的。
我已经看过介体模式让模型直接进行通信。不喜欢这个想法,因为它使得模型取决于GUI的实现细节。 (即如果对话框被替换为文本框,则该模型需要改变)
难道你看看下面的问题HTTP://stackoverflow.com/questions/454868/handling-dialogs-in-wpf-with-mvvm http://stackoverflow.com/questions/ 1667888/wpf-mvvm-dialog-example http:// stackoverflow。com/questions/1792814/using-mvvm-foundation-messenger-to-show-dialog – Guge 2009-11-26 23:01:15
是的,我看着他们,但他们都推荐一个广播模式来解决实例的实例。 – adrianm 2009-11-27 09:33:00
'点击按钮在ViewModel中生成一个命令',这是什么意思? 'ViewModel引发了一个Controller监听的事件',什么控制器?! – 2016-12-29 09:42:59