2011-01-31 2 views
2

Я новичок в WPF и MVVM. Я хотел бы свернуть окно, а не закрывать его. Другими словами, я хотел бы отменить Closing событие окна и свернуть это окно.WPF MVVM отмена закрытия окна

Как мне это сделать MVVM?

Если это актуально, в конце я установлю ShowInTaskbar на false и воспользуюсь компонентом лотка WinForms.

ответ

9

Общее недоразумение с MVVM в том, что не может никогда, никогда не будет фоновым кодом в представлении. Это просто не соответствует действительности.

Цель MVVM заключается в минимизировать код в код-сзади, но и для вещей, которые непосредственно взаимодействуют с самим (например, событий Windows) зрения, допустимо поставить в некоторый код-за , Кодовое отставание будет обрабатывать Отмена и может сделать минимизацию или вызвать команду в ViewModel или какую-либо другую такую ​​вещь.

В противном случае вам придется придумать запутанную систему обработки события в ViewModel, которая разбивает шаблон MVVM, если ViewModel имеет ссылку на представление (а не наоборот).

+1

полностью здравый ответ. – Robaticus

+0

Звучит разумно. Спасибо! – prostynick

+0

Помните, что точка MVVM - это сделать бизнес-логику, которая окажется в коде, который подлежит тестированию. Если вы можете воспринимать представление как зависимость с помощью интерфейса, то вы действительно не нарушаете эту концепцию, действительно, вы приближаетесь к шаблону Active Presenter, но это тоже неплохо. – Agies

1

Просто переопределить событие закрытия и сделать это:

e.Cancel = true; 
this.ShowInTaskbar = false; 
this.WindowState = WindowState.Minimized; 
Смежные вопросы