首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是在WPF和MVVM中创建对话框的糟糕方法吗?

这是在WPF和MVVM中创建对话框的糟糕方法吗?
EN

Stack Overflow用户
提问于 2013-04-03 07:19:12
回答 3查看 444关注 0票数 2

我有一个使用mvvm模式的WPF应用程序,我需要从我的主视图模型中显示一个对话框。

我有一个第二个视图,它的视图模型,我认为我有两个选项来创建对话框。

选项1

在主体视图模型中,我可以执行以下操作:

  1. 创建对话框的视图
  2. 创建对话框的de模型
  3. 将视图模型分配给视图
  4. ShowDialog

选项2

在主视图模型中:

  1. 创建对话框的视图模型

在对话框的视图模型的构造函数中:

  1. 创建对话框的视图
  2. 将视图模型分配给视图。在这种情况下,指定" this“。
  3. ShowDialog

我知道在MVVM中,视图模型不需要了解视图,但是在第二个选项中,在实践中,视图模型如何没有任何链接到视图的属性,只是在构造函数中创建一个显示,在最后的状态中,视图模型对视图一无所知。

但是,我认为主体视图中的代码更清晰,因为我只需要创建视图模型,只需要一行代码,而不是需要4行的选项1(创建视图、创建视图模型、将视图模型分配到视图并显示对话框)。

如果我想要遵循mvvm模式,认为第二个选项不是一个坏主意,我是否错了?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-03 07:41:07

我在wpf中为对话框做

代码语言:javascript
复制
var result = this.uiDialogService.ShowDialog("Dialogwindow title goes here", dialogwindowVM);

... do anything with the dialog result...
票数 1
EN

Stack Overflow用户

发布于 2013-04-03 07:40:51

与大多数情况一样,有几种实现解决方案的方法。

对于具有多个对话框、窗口或页面的大型应用程序,最好的方法是提供服务,例如IDialogHandler。通过c_tor提供给虚拟机。您可以在这个帖子中找到一个例子。

最大的优点是解耦,这使得VM易于测试,因为它们没有对视图的引用。

对于具有2或3个不同对话框的较小应用程序,下面的方法也是适当的。

代码语言:javascript
复制
public class DialogView : Window
{
    // a method to create easily a dialog
    public static void ShowDialog(DialogViewModelBase dialogVm)
    {
        var dialog = new DialogView { DataContext = dialogVm };
        dialog.ShowDialog(); // pls note, that this will create a modal dialog
    }
}

因此,DialogView.ShowDialog(...)可以从任何地方调用。但是在这里,VM有对视图的引用。

这类似于您的选项1,很好,步骤顺序不一样,但已经足够接近了。

票数 1
EN

Stack Overflow用户

发布于 2013-04-03 08:32:19

不管你选择哪种方式,都有一个麻烦。

坦率地说,它不仅与对话有关,而且与所有窗口有关。在MVVM中,这会成为一种真正的痛苦。至少对于我们的团队,当我们同时使用WinForms和WPF时。

大多数开发人员忘记了windows的父子关系。

关于对话框窗口,这会导致一些糟糕的UX:对话框有可能在主窗口下面,因为显示的对话框没有响应。(你可以很容易地还原它)。

因此,在MVVM中,您需要以某种方式设置父级。这里最重要的是,这个视图不需要一个窗口。

这是我们怎么做的。

我们提出了视图模型-第一方法。但是我们没有在VM中注入View。我们传递IViewService,这是可修复的视图实例化,父子关系和监听一些事件.

当用户点击右上角的时候,想想你的虚拟机如何阻止它的视图关闭。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15781149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档