Как правильно вызвать Dialog из ViewModel? - PullRequest
0 голосов
/ 13 февраля 2020

Я думаю, что это в основном вопрос архитектуры. У меня View и мой ViewModel класс установлен как DataContext. Теперь у меня есть событие click, связанное с View на ICommand.

Итак, что у нас есть, пользователь нажимает кнопку в View Я получаю это событие в ViewModel, и я хотел бы открыть Dialog.

Что касается меня, Dialog он связан с View, и View должен открыть это диалоговое окно, так что это означает, что этот метод

public void OpenDialog(){...}

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

Вопросы:

  • Если я правильно понимаю этот подход MVFM WPF
  • Как установить эту связь (лучшие практики)

1 Ответ

1 голос
/ 13 февраля 2020

Вы можете создать свойство в модели представления со следующей подписью:

public Func<string, string, bool> ReportMessage { get; set; }

Тогда при построении модели представления вы можете передать ей реализацию:

var OKCancelMessage = new Func<string, string, bool>((m, c) => MessageBox.Show(m, c) == MessageBoxResult.OK ? true : false);

new ViewModel() 
{ 
    ReportMessage = OKCancelMessage 
}

Таким образом, ваш Модель представления не будет знать о реализации сообщения, и было достигнуто отделение представления от модели.

РЕДАКТИРОВАТЬ

Вызов функции прост:

if(ReportMessage("Do you really want to delete this record?", "Question"))
    Delete(record);
...