2013-04-24 97 views
2

讨论视图模型之间的通信模式有interesting post模式是MVVM中的反模式吗?

我最近努力在WPF MVVM应用程序中实现模态对话框,但是我越想越多,我就看到了为什么它很困难的原因以及为什么没有内置的帮助程序来实现此目的。针对不同的平台只能强化这种观点:通常通过导航到移动设备上的不同视图来实现看起来适合于显示选定项目细节的模式对话框的内容。

所以我的问题给那些成功实现MVVM模式并避免代码隐藏的人:你是否也避免了模态对话框?你觉得什么替代品适合?我可以想到至少两个:

  • 在新视图中放置child(模态)视图并使用pub/sub实现父级和子模型之间的通信;
  • 将带有子控件的面板直接添加到父视图中,并将其可见性作为弹出模拟模式激活子视图。

第二种方法肯定会受到更多的限制,当父视图可以产生各种子视图时,它并不真正起作用,但当父视图需要显示一个小的单个弹出框时,它看起来很合适。或者更为通用的做法是更好地采用第一种方法。还有其他的选择吗?

回答

1

thats我在mvvm中做对话的方式。

视图模型这就要求一个对话窗口:

var result = this.uiDialogService.ShowDialog("Dialogwindow title goes here", dialogwindowVM); 

... do anything with the dialog result... 
+0

谢谢,我已经看到了这种做法。我对此不确定,因为那时我们把对话看作是服务,所以在这样的服务中显示对话和调用Web服务没有太大区别。换句话说,即使每个单独的对话框都可以使用MVVM模式实现,我们也可以将它从共享的MVVM空间中取出。另一件事是我们声明某个操作必须使用DialogService。如果它在不同的平台上使用不同的手段呢?那么我们不能重用它。 – 2013-04-24 12:52:50

+0

你的意思是重用?重用.net视图模型? – blindmeis 2013-04-24 13:35:05

+0

是的,我已经看到包装在可移植类库中的视图模型,并在WPF,Windows Store,Windows Phone甚至iOS/Android应用程序之间重用。我想以这种方式构建我的模型,即使需要花费一些努力来弄清楚如何。 – 2013-04-24 14:18:44