显示对话框MVVM模式

时间:2013-06-21 20:16:06

标签: wpf xaml mvvm

我在这里有一个属性,显示来自组合框的选定消息。在我的InitializeMessageFields方法中,我根据所选项加载数据网格。  假设我的组合框中有不同的项目。我想要做的是在加载网格之前显示(在某些对话框中)所选项目,以通知用户哪些网格数据属于哪个项目。  private string _selectedMessageType;

    public string SelectedMessageType
    {
        set
        {
            if (_selectedMessageType == value) return;
            this._selectedMessageType = value;
            InitializeMessageFields();
            this.NotifyPropertyChanged("IsMessageTypeSelected");
        }
        get
        {
            MessageBox.Show("Loading ",_selectedMessageType );
            return this._selectedMessageType;
        }

    }

我该怎么做?

2 个答案:

答案 0 :(得分:0)

根据您打开对话框的方式,您可以在视图模型中引发事件,使用Viv建议的服务定位器模式,或使用MVVMLite's Messenger(只是一些想法)。 您可以直接从视图模型中打开对话框,但这是 不可取 ,因为它会阻止您对视图模型进行单元测试或重用视图模型(可能是一个portable class library)。

以下是msdn的一篇文章和一些示例代码,演示了如何打开wpf对话框。您可以将ViewModel传递给对话框构造函数并设置窗口的数据上下文。

http://msdn.microsoft.com/en-us/library/aa969773.aspx#Custom_Dialog_Boxes

 // Instantiate the dialog box
 MarginsDialogBox dlg = new MarginsDialogBox();

 // Configure the dialog box
 dlg.Owner = this;

 // Open the dialog box modally 
 dlg.ShowDialog();

答案 1 :(得分:0)

直接在VM中显示对话框会使测试变得困难。而是通过负责显示消息的构造函数将服务作为依赖项传递。通过接口实现它,以便您可以模拟它进行测试。

或者在棱镜中使用类似事件聚合器的东西。这将是我的首选方法。

如果你想直接在vm中显示懒惰,那么至少添加一个布尔属性来抑制测试。