Событие стрельбы MVVM вернуться к просмотру - PullRequest
0 голосов
/ 12 ноября 2009

У меня есть ViewModel, где одна из его функций - общаться с сервисом и получать некоторые данные. Однако, если есть проблема, я хотел бы уведомить пользователя о том, что служба не может быть запущена.

В настоящее время я запускаю событие, на которое подписано представление (моя viewModel создается в разделе ресурсов представления), и получаю событие в обработчике события представления. Я просто делаю Windows.Alert ().

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

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

JD.

Ответы [ 3 ]

1 голос
/ 13 ноября 2009

Лучше всего воспользоваться услугой здесь. Сервис просто предоставляет некоторую функцию через интерфейс.

public interface IDialogService {
    void ShowNotifictation(string message);
}

ViewModel использует этот сервис и использует его для отображения уведомления. Реализация этого сервиса зависит от вашего решения и может отображать уведомление по вашему желанию.

1 голос
/ 17 ноября 2009

Реализация такого сервиса может выглядеть так:

[Export(typeof(IMessageService))]
public class MessageService : IMessageService
{
    public void ShowMessage(string message)
    {
        MessageBox.Show(message);
    }
...

В качестве контейнера IoC используется MEF. Сервис зарегистрирован через атрибут экспорта как IMessageService.

Вы можете взглянуть на WPF Application Framework (WAF) , чтобы увидеть полную реализацию и примеры приложений, использующих этот сервис.

Надеюсь, это поможет.

JBE

1 голос
/ 12 ноября 2009

Да, я не думаю, что подписка на событие в виртуальной машине из View - это хорошая идея. Почти лучше поместить предупреждение в ВМ, но это помещает пользовательский интерфейс в ВМ и затрудняет его тестирование. Есть несколько других способов справиться с этим.

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