ОК Открыть новое окно во ViewModel? - PullRequest
2 голосов
/ 19 октября 2010

Если я хочу открыть новое окно, не требуя немедленной информации, можно ли его открыть таким образом? Я знаю, что с диалогами я должен использовать сервис, но если мне не нужна какая-либо информация назад, это довольно хлопотно и грязно, чтобы добавить новую функцию в сервис, просто чтобы открыть окно?

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

Ответы [ 2 ]

2 голосов
/ 19 октября 2010

Чтобы расширить сказанное в Tri Q, после того, как вы это сделаете, вы связали модель представления с WPF и не сможете протестировать ее вне рамок.

И даже если это на самом деле не мешало работе (скажем) NUnit, это все равно было бы проблемой: как написать тест, чтобы продемонстрировать, что ваша модель представления действительно открывает окно в нужное время?

Вот почему вы либо хотите внедрить сервис, либо просто заставить модель представления вызвать событие. Это дает вам возможность написать модульный тест, который может проверить, что логика открытия окна запускается при правильных обстоятельствах.

2 голосов
/ 19 октября 2010

Вы "могли бы" сделать это, но вы не сможете использовать цель шаблона MVVM. Цель моделей представлений - поддерживать модульное тестирование (не выполнение потоков STA), поэтому, когда вы начнете показывать окна пользовательского интерфейса, ваш модульный тест не будет работать.

Таким образом, правильное понимание использования посредника службы для диалоговых окон заключается не в том, что он требует какого-либо ответа на возврат, а в том, чтобы модели представления могли выполняться в потоках, отличных от STA.

Надеюсь, что это прояснит для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...