【问题标题】:Add cofirmation message when ever user clicks on close button in WPF with MVVM每当用户单击带有 MVVM 的 WPF 中的关闭按钮时添加确认消息
【发布时间】:2016-05-03 22:34:18
【问题描述】:

在带有 MVVM 的 WPF 中,如何在用户单击关闭按钮时添加确认消息。每次,它只是关闭窗口而没有任何确认消息,而在 Windows 窗体中发生同样的事情。

在 APP.XAML.CS 中

    public partial class App : Application
    {
        protected override void OnExit(ExitEventArgs e)
        {
            if (MessageBox.Show("Sure you wanna close?", "..", MessageBoxButton.YesNo) == MessageBoxResult.No)
                e.ApplicationExitCode = 110;
            base.OnExit(e);
        }
    }

当我点击关闭按钮时,它不会要求确认,只是关闭窗口。

【问题讨论】:

    标签: wpf mvvm


    【解决方案1】:

    你可以使用一个行为。

    首先,您必须在项目中添加对 Interactivity 的引用。

    转到 References-addReference-assemblies-System.Windows.Interactivity。

    现在,您创建行为。

    public class CloseWindowBehavior : Behavior<Window>
    {
    
        protected override void OnAttached()
        {
            this.AssociatedObject.Closing += AssociatedObject_Closing;
        }
    
        private void AssociatedObject_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (MessageBox.Show("Sure you wanna close?", "..", MessageBoxButton.YesNo) == MessageBoxResult.No)
                e.Cancel = true;
        }
    }
    

    当您单击关闭按钮时,将触发分配的事件,并显示消息框。

    现在,您必须在您的 xaml 文件中声明此创建的行为。

    <Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApplication1"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <i:Interaction.Behaviors>
        <local:CloseWindowBehavior />
    </i:Interaction.Behaviors>
    <Grid>
    
    </Grid>
    

    由于您使用的是 MVVM 模式,因此行为是一个不错的选择,因为您不需要在后面的代码中编写一行代码。

    【讨论】:

      【解决方案2】:
          protected override void OnStartup(StartupEventArgs e)
          {            
      
              base.OnStartup(e);
              base.ShutdownMode = ShutdownMode.OnMainWindowClose;
      
              //update user settings (if first run after software upgrade)
      
              }
      
              // Initialise the application directory//
      
              // Set up the main window and its view model
              var mainWindow = new MainWindow();
              mainWindowViewModel = new MainWindowViewModel();
              mainWindow.DataContext = mainWindowViewModel;
              mainWindow.Show();
      
          }
      
          protected override void OnExit(ExitEventArgs e)
          {
      
      
      
              e.ApplicationExitCode = 110;
              Dispose();
              base.OnExit(e);
      

      }

      【讨论】:

      • 别忘了致电base.OnClosing(e)
      • 我的 APP.XAML.CS 中的 HI。公共部分类应用程序:应用程序,IDisposable。因此,在覆盖 OnClosing 时,我收到类似“System.Windows.Application”的错误不包含“OnClosing”的定义。所以这不可行
      猜你喜欢
      • 2016-08-07
      • 2020-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多