Я создаю базовое приложение базы данных в WPF и начал использовать шаблон MVVM.
У меня есть диалоговое окно, в котором пользователю предлагается выбрать элемент из ListBox
и нажать «ОК». После этого я беру элемент, выбранный пользователем из свойства в модели представления, и передаю его в другое диалоговое окно. Но если пользователь нажимает «Отмена», я устанавливаю это значение на null
, и действие отменяется: я не открываю следующий диалог и не возвращаюсь к главному экрану. Пример:
public class SelectEquipmentViewModel : WorkspaceViewModel
{
private bool _selected;
public Equipment SelectedEquipment
{
// Item selected by the user
}
// Action for "SelectCommand," which is attached to
// the "Select" button in the view
public void ExecuteSelect()
{
_selected = true;
// Fires a RequestClose event in WorkspaceViewModel,
// which is attached to the view's Close method
RequestClose();
}
public override void RequestClose()
{
if (!_selected)
{
// The user clicked "Cancel"
SelectedEquipment = null;
}
base.RequestClose();
}
}
Это прекрасно работает, но проблема возникает, если пользователь нажимает красную кнопку закрытия "X" в окне управления окна. Метод RequestClose
никогда не вызывается, и для выбранного элемента не установлено значение null
, что плохо.
Я рассмотрел возможность присоединения модели представления к событию Closing
представления, но я чувствую, что это может запутаться, если я начну создавать обработчики для всех этих событий.
Каков «предпочтительный» способ справиться с этой ситуацией?
Спасибо.