当用户点击WPF中的关闭按钮时使用MVVM添加cofirmation消息

时间:2016-05-02 17:01:21

标签: wpf mvvm

在带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);
        }
    }

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

2 个答案:

答案 0 :(得分:0)

    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);

}

答案 1 :(得分:0)

您可以使用某种行为。

首先,您必须在项目中添加对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模式,因此您不需要在后面的代码中编写单行,因此行为是一个不错的选择。