使用MVVM指示灯关闭带有“X”按钮的窗口时的确认

时间:2013-01-18 08:52:30

标签: wpf mvvm-light

我正在使用WPF和MVVM Light框架(我是新用的)。

我想做以下事情:

  1. 当用户点击“X”关闭按钮时,我想显示一个确认窗口,如果他是否要退出该应用程序。
  2. 如果是,则应用程序关闭
  3. 如果不是,没有任何反应,他仍然可以按正常使用该应用程序
  4. 到目前为止,我有这个:

    • 在MainWindow.xaml.cs中:

      public MainWindow()
      {
          InitializeComponent();
          Closing += (s, e) => ViewModelLocator.Cleanup();
      }
      
    • 在ViewModelLocator.cs中:

      public static void Cleanup()
      {
          ServiceLocator.Current.GetInstance<MainViewModel>().Cleanup();
      }
      
    • 在MainViewModel.cs中:

      public override void Cleanup()
      {
          MessageBoxResult result = MessageBox.Show(
                          "Unsaved data will be lost, would you like to exit?",
                          "Confirmation",
                          MessageBoxButton.YesNo,
                          MessageBoxImage.Question);
      
          if (result == MessageBoxResult.Yes)
          {
            // clean-up resources and exit
          }
          else
          {
            // ????
          }
      

    实际上,如果用户回答“是”或“否”,则两种情况下应用程序都将退出。

    我不太确定如何从这里开始...

    任何帮助都会很棒!

    由于

2 个答案:

答案 0 :(得分:4)

如果要取消关闭,可以使用EventToCommand中的EventTrigger来捕获结束事件,并将传递的Cancel的{​​{1}}属性设置为true :

<强> XAML:

CancelEventArgs

<强>视图模型:

<Window ...
   xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
   xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WPF45"
   DataContext="{Binding Main, Source={StaticResource Locator}}">
   <i:Interaction.Triggers>
      <i:EventTrigger EventName="Closing">
         <cmd:EventToCommand Command="{Binding OnClosingCommand}" 
            PassEventArgsToCommand="True"/>
      </i:EventTrigger>
   </i:Interaction.Triggers>
   <Grid>
     ...
   </Grid>
</Window>

答案 1 :(得分:2)

Closing事件参数具有Cancel属性,如果用户取消关闭,则需要将其设置为true。因此,您的Cleanup()方法应该返回bool,您应该将其分配给Cancel属性。