Как предотвратить перечисление WPF в ModelView - PullRequest
0 голосов
/ 10 февраля 2012

В настоящее время в моем приложении я использую метод func / lambda для отображения окон сообщений, как объяснено в URL ниже:

http://www.deanchalk.me.uk/post/WPF-MVVM-e28093-Simple-e28098MessageBoxShowe28099-With-Action-Func.aspx

Для передачи текста в окне сообщения и заголовокпроблема, однако я также хочу передать изображение блока изображения и тип блока изображения (да / нет и т. д.).Это перечисления WPF.В настоящее время я написал несколько методов для преобразования этих перечислений в перечисления не WPF (собственного производства), но несколько утомительно копировать каждое значение.

Допустимо ли использовать перечисления WPF во ViewModel?(Наверное, нет).И если нет, как я могу предотвратить их использование и по-прежнему выбирать их во ViewModel?

1 Ответ

3 голосов
/ 10 февраля 2012

Я немного запутался с вашими терминами ModelView и ViewModel. В MVVM есть только модель, представление и модель представления.

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

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

1008 * Е.Г. *

public enum ConfirmationResult
{
  Yes,
  No, 
  Cancel
  ..etc
}

public enum ConfirmationType
{
  YesNo,
  OkCancel
  ..etc    
}

public interface IConfirmation
{
  ConfirmationResult ShowConfirmation(string message, ConfirmationType confirmationType)
}

public class MessageBoxConfirmation : IConfirmation
{
  ConfirmationResult ShowConfirmation(string message, ConfirmationType confirmationType)
  {
    // convert ConfirmationType into MessageBox type here
    // MessageBox.Show(...)
    // convert result to ConfirmationResult type
  }
}

Тогда ваши модели представлений будут принимать IConfirmation в качестве зависимости (в их конструкторе, например), а в модульных тестах вы можете заблокировать интерфейс IConfirmation, чтобы всегда возвращать определенный результат из метода ShowConfirmation.

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

...