В ситуации MVVM вы можете использовать делегата, чтобы позволить вашему View открывать диалоговое окно, когда ViewModel запрашивает его.
Вы определяете делегата на виртуальной машине:
public Func<LoginResult> ShowLoginDialogDelegate;
В вашемВ представлении вы определяете функцию, которая будет вызываться:
private LoginResult ShowLoginDialog()
{
LoginResult result;
// show a dialog and get the login data
return result;
}
Затем вы «подключаете» делегат и метод в представлении:
_viewModel = new MyViewModel();
DataContext = _viewModel;
_viewModel.ShowLoginDialogDelegate += ShowLoginDialog;
И теперь вы можете использовать его в своей ViewModelнапример, когда команда выполняется так:
LoginResult result = ShowLoginDialogDelegate();