绑定到MVVM WPF中的Window关闭事件?

Har*_*raf 0 c# wpf xaml mvvm

我试图在我的视图上捕获close事件以调用save方法.我不希望用户能够关闭窗口并处理未保存的更改.我试过用

Application.Current.MainWindow.Close()
Run Code Online (Sandbox Code Playgroud)

但问题的观点不是我的观点MainWindow.有没有办法将关闭窗口绑定到Xaml的命令沿着以下行:

public RelayCommand CloseWindow;
Constructor()
{
    CloseWindow = new RelayCommand(CloseWin);
}

public void CloseWin(object obj)
{
    Window win = obj as Window;
    win.Close();
}
Run Code Online (Sandbox Code Playgroud)

和Xaml:

<Button Command="{Binding CloseWindowCommand}" CommandParameter="{Binding ElementName=WindowNameTobeClose}" Content="Cancel" />
Run Code Online (Sandbox Code Playgroud)

但是捕获窗口关闭事件而不是绑定到UI中的已定义按钮?

Har*_*raf 12

这是我的解决方案.Xaml中的命名空间:

xmlns:z="http://schemas.microsoft.com/expression/2010/interactivity"
Run Code Online (Sandbox Code Playgroud)

Xaml绑定:

 <z:Interaction.Triggers>
        <z:EventTrigger EventName="Closing">
            <i:InvokeCommandAction Command="{Binding CloseWindowCommand}" />
        </z:EventTrigger>
    </z:Interaction.Triggers>
Run Code Online (Sandbox Code Playgroud)

我已经在项目中有一个命令助手类.这是我的viewModel中的公开属性:

   private ICommand _CloseArticleCommand;
    public ICommand CloseArticleCommand
    {
        get { return _CloseArticleCommand; }
        set
        {
            _CloseArticleCommand = value;
            OnPropertyChanged("CloseArticleCommand");
        }
    }
Run Code Online (Sandbox Code Playgroud)

该属性在viewModel构造函数方法中初始化:

  private void InitialiseBtnCommands()
    {
        CloseWindowCommand = new BtnCommand(CloseWindowCommandAction);         
    }
Run Code Online (Sandbox Code Playgroud)

最后执行保存的动作方法:

 private void CloseWindowCommandAction()
        {
            //Save your data etc.                
        }
Run Code Online (Sandbox Code Playgroud)