Как обрабатывать закрытие окна при нажатии на значок закрытия в правом верхнем углу в WPF / MVVM? - PullRequest
0 голосов
/ 11 октября 2011

Я могу связать кнопки и пункты меню с помощью ICommand и закрыть окна.Это в точности как описано в учебнике Приложения WPF с шаблоном проектирования Model-View-ViewModel - через свойство Command, доступное в XAML.

Но оно не описано и не реализованоучебник, как закрыть, нажав стандартную иконку «Закрыть» в правом верхнем углу окна.Мне нужно выполнить некоторую очистку в моем приложении.Мой вопрос заключается в том, как связать Command с событием закрытия, чтобы оно выполнялось, когда пользователь нажимает значок закрытия (не кнопки или пункты меню - я знаю, как управлять такими случаями).

Какследует ли это обрабатывать, чтобы избежать нарушения подхода MVVM?Спасибо!

Ответы [ 2 ]

2 голосов
/ 11 октября 2011

MVVM Light Toolkit содержит поведение под названием EventToCommand, которое дает вам простой способ привязать команду к событию.

В следующем фрагменте XAML показан пример того, как получить команду с именем «CloseCommand» для выполнения при возникновении события Closed окна:

<Window x:Class="EventToCommand.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" 
        xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WPF4"
    Title="MainWindow" Height="300" Width="500">

    <!-- Make sure to put this tag directly inside the Window, 
         and not inside a child element, since it is the Windows that has the Closed event -->
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Closed">
            <cmd:EventToCommand Command="{Binding CloseCommand}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>

    <!-- Windows contents -->

</Window>

Чтобы получить доступ к поведению EventToCommand, вам необходимо скачать MVVM Light Toolkit со страницы загрузки проекта , а затем обратиться к следующим библиотекам DLL:

  • GalaSoft.MvvmLight.dll
  • GalaSoft.MvvmLight.Extras.dll
  • System.Windows.Interactivity.dll

Это все, что нужно.

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

2 голосов
/ 11 октября 2011

Я бы привязал команду к событию Exit приложения

Мне нравится использовать поведение AttachedCommand, найденное здесь для привязки команд к событиям, хотя я знаю, что вы также можете выполнить то же самое, используя триггеры взаимодействия Blend.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...