【问题标题】:Modal Window with MVVM pattern带有 MVVM 模式的模态窗口
【发布时间】:2010-12-20 15:34:53
【问题描述】:

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

        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>

我做错了什么?

谢谢。

【问题讨论】:

    标签: wpf mvvm dialog modal-dialog


    【解决方案1】:

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

    【讨论】:

    • 不,如果你仔细阅读,我写道,当我分配 newErrorViewModel 时,我看不到视图,只有窗口中写入的文本。
    • 所以您实际上是在说您的 DialogWindow 没有为其内容实例化正确的 DataTemplate?如果它的内容是 yype NewErrorViewModel 它必须使用您提供的 DataTemplate 并实例化 NewErrorView。
    【解决方案2】:

    知道了。

    我已经在 ErrorView.xaml 中放置了用于连接模型和视图的代码。这当然是我的错误。我已将这些行替换为 app.xaml 资源,它正在发挥作用。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2010-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-14
        • 1970-01-01
        • 1970-01-01
        • 2010-10-10
        • 1970-01-01
        相关资源
        最近更新 更多