错误窗口显示在MVVM WPF模式(Error window show modal in MVVM

2019-07-03 12:57发布

我已经实现了我的MVVM的错误消息,订阅通过中介类错误消息的消息对话框,因此,如果发生任何错误,其他的ViewModels能够通知它。

当发生错误时,我设置的可见性属性的视图模型到可见,以显示错误窗口。 这是所有绑定从视图模型错误窗口。

然而,这个窗口是不是模态! 我需要它显示为对话而不是仅仅设置能见度为true - 是否有任何形式的结合,我可以做,即使我不得不延长窗口的功能? 我宁愿不打破MVVM如果我能避免它。

谢谢!

Answer 1:

查看/视图模型拆分是为了划分从功能看。 我坚信窗口是功能和外观集于一身。 举例来说,如果你的ErrorMessageViewModel,你有这个代码时出现错误,执行:

class WindowViewModel : Window
{
}

.
.
.

WindowViewModel newDialog = new WindowViewModel();
newDialog.Content = myErrorListViewModel;
newDialog.Parent = mainWindowViewModel;
newDialog.ShowDialog();

因此,对话框的内容是你的错误列表视图模型。 定义你的浏览作为自动本身适用于错误列表视图模型数据模板。

不,看起来像MVVM?

事实是,窗口类是你在屏幕上看到窗口一个ViewModel。 通过改变窗口对象的属性,它会影响“视图”一样,如果窗口视图的性能进行了绑定到WindowViewModel。 唯一缺少的是“restyle”使用WPF的窗口,它不会不管你怎么努力,以实现它的能力,你不会是能够做到这一点。 用户可以通过修改自己的桌面主题restyle一个窗口,但你控制它不是。 你能做的最好是关闭的铬和/或使全屏幕。



Answer 2:

你会发现一个例子,如何窗口(如果他们是模态与否并不重要)所示,在这个项目中的视图模型例如:

WPF应用程序框架(WAF)

http://waf.codeplex.com



Answer 3:

我工作,也对MVVM项目,我需要的模式dialogboxes或消息框。 我已经找到解决它的方式如下:

该软件只使用一个窗口。 布局根元素是不具有行向或columndefinitions的网格。 网格有三个孩子:

  1. 包含所有平常的东西,如菜单,标签视图,状态栏等一个DockPanel中。
  2. 具有灰色背景和一个50%的不透明度的网格。 这被用作面纱覆盖DockPanel中当模态框生效。 面纱电网通常萎陷。
  3. 网格控股模式的看法,这通常是崩溃了。

主窗口中的视图模型有一个称为模态成员。 如果这是空,两个格栅用于模态的使用是通过数据绑定和Visibility.Collapsed转换器崩溃了。

当程序要显示例如一个模式消息框,一个MessageBoxViewModel被实例化并分配给MainViewModel.Modal。 该MessageBoxViewModel有一个OK键的命令。 该命令提出,设置了MainViewModel.Modal再次空的事件。

面纱网格闭塞主DockPanel中,从而使模态外没有控制控制接受输入。

你的程序可以运行messagepump直至OK被按下,或OK命令可以触发下一个。 有解决不同需求的方法很多,但是模型的模型视图解决方案应该支持他们。

我觉得这是在模态模式可以希望视图的良好典范。



Answer 4:

我做了一个behhavior扳平一些模式对话框的命令。

http://www.clr-namespace.com/post/MVVMModal-dialog-before-running-Command.aspx

<Confirm:Confirm IsConfirm="{Binding ElementName=checkBoxConfirm, Path=IsChecked}"
Command="{Binding Path=ButtonCommand}" 
CommandParameter="{Binding ElementName=textBoxParameter, Path=Text}" 
ConfirmMessage="Are you sure you want to fire the command?" 
ConfirmCaption="Question" >
</Confirm:Confirm>


Answer 5:

在我最近的博客文章,你可以找到模态对话框和消息框在MVVM为Silverlight,但是这可以在WPF简单地重复使用简单的解决方案:

模式对话框与MVVM和Silverlight 4



Answer 6:

我使用同样的方法,斯科特·惠特洛克。

有设置只是一个更重要的属性:

class ModalDialog: Window
{
}

.
.
.

var dlg = new ModalDialog {
    Content = viewModelName,
    **TopMost = true,**
    Parent = mainWindowViewModel
};

dlg.ShowDialog();


文章来源: Error window show modal in MVVM WPF