-1

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

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

    }

我怎样才能做到这一点?

4

2 回答 2

0

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

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

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

于 2013-06-21T22:20:51.767 回答
0

根据您想要打开对话框的方式,您可以在视图模型中引发事件,使用 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();
于 2013-06-21T21:51:39.110 回答