确定要在ViewModel中打开新窗口?

时间:2010-10-19 01:38:32

标签: c# wpf mvvm

如果我想打开一个新窗口而不需要任何即时信息,可以这样打开它吗?我知道使用Dialogs我应该使用一个服务,但如果我不需要任何信息,那么在服务中添加一个新功能只是为了打开一个窗口是非常麻烦和麻烦的?

// in ShellViewModel
public ICommand AboutCommand
{
    get
    {
        if (_aboutCommand == null) {
            _aboutCommand = new RelayCommand(delegate
            {
                var aboutView = new QuickImageUpload.Views.AboutView();
                aboutView.Show();
            });
        }
        return _aboutCommand;
    }
}

2 个答案:

答案 0 :(得分:2)

你“可以”这样做,但你将击败MVVM模式的目的。视图模型的目的是支持单元测试(非STA线程执行),因此当您开始显示UI窗口时,您的单元测试将无法工作。

因此,为了纠正您对使用服务中介进行对话框的理解,并不是它需要某种类型的返回响应,而是仍然允许在非STA线程中执行视图模型,因此是快乐的单元测试者。

希望能为你清除它。

答案 1 :(得分:2)

为了扩展Tri Q所说的内容,一旦你这样做,你就已经将视图模型与WPF结合起来了,你将无法在框架之外进行测试。

即使这实际上并没有使NUnit(比如说)不起作用,它仍然是一个问题:你如何编写测试来证明你的视图模型实际上是在正确的时间打开窗口?

这就是您要么实现服务,要么只是让视图模型引发事件的原因。这为您提供了一种编写单元测试的方法,可以验证在正确的情况下是否触发了窗口打开逻辑。