显示对话框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;
        }
    }

我该怎么做?

直接在虚拟机中显示对话框会使测试变得困难。相反,通过负责显示消息的构造函数将服务作为依赖项传递。通过一个接口实现它,这样您就可以模拟它进行测试。

或者使用类似棱镜中的事件聚合器之类的东西。这将是我更喜欢的方法。

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

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

以下是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();

最新更新