具有MVVM模式的模态窗口

时间:2010-12-20 15:34:53

标签: wpf mvvm dialog modal-dialog

我正在尝试制作模态对话框窗口,让用户知道一些错误消息,或者让用户编辑一些值。 我正在使用MVVM模式,所以我的主窗口有一些控制部分和工作区部分。在工作区部分,我打开viewmodels紧跟datatemplate到视图(定义为usercontrols)。从其中一个视图我想打开模态对话框窗口。我正在按照这个答案Error window show modal in MVVM WPF。如该答案所述,我在InvoiceViewModel中实现了DialogClass。但我显示模态窗口的内容有问题。如果我将窗口的内容设置为ViewModel类,则输出是具有该ViewModel的命名空间路径的简单文本。 (使用datatemplate附加到View的ViewModel。)如果我将内容设置为View - 它正在工作 - 视图显示但是,我正在消除MVVM模式(从ViewModel打开View,因为ViewModel没有对View的引用)。

        ErrorViewModel newErrorViewModel = new ErrorViewModel();
        ErrorView newErrorView = new ErrorView();
        DialogWindow dialogWindow = new DialogWindow();
        //Not Working
        //dialogWindow.Content = newErrorViewModel;

        //Working But, breaking MVVM 
        dialogWindow.Content = newErrorView;
        dialogWindow.ShowDialog();

在ErrorView.xaml中,我已经附加了ErrorViewModel。

<DataTemplate DataType="{x:Type vm:ErrorViewModel}">
    <vw:ErrorView/>
</DataTemplate>

我做错了什么?

感谢。

3 个答案:

答案 0 :(得分:0)

您正在将newErrorView分配给对话框的内容,而不是newErrorViewModel

答案 1 :(得分:0)

知道了。

我已经在ErrorView.xaml中放置了用于连接模型和视图的代码。这当然是我的错。我已将这些行替换为app.xaml资源,它正在使lika成为一种魅力。

答案 2 :(得分:0)

也许您有兴趣看到在此方案中使用托管扩展性框架(MEF)的替代实现。请查看 WPF Application Framework (WAF) ViewModel 示例应用程序。