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

时间:2014-06-17 10:04:15

标签: c# wpf xaml mvvm

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

Application.Current.MainWindow.Close()

但有问题的观点不是我的MainWindow。有没有办法将关闭窗口绑定到Xaml中的命令:

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

public void CloseWin(object obj)
{
    Window win = obj as Window;
    win.Close();
}

&安培; Xaml:

<Button Command="{Binding CloseWindowCommand}" CommandParameter="{Binding ElementName=WindowNameTobeClose}" Content="Cancel" />

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

1 个答案:

答案 0 :(得分:10)

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

xmlns:z="http://schemas.microsoft.com/expression/2010/interactivity"

Xaml绑定:

 <z:Interaction.Triggers>
        <z:EventTrigger EventName="Closing">
            <i:InvokeCommandAction Command="{Binding CloseWindowCommand}" />
        </z:EventTrigger>
    </z:Interaction.Triggers>

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

   private ICommand _CloseArticleCommand;
    public ICommand CloseArticleCommand
    {
        get { return _CloseArticleCommand; }
        set
        {
            _CloseArticleCommand = value;
            OnPropertyChanged("CloseArticleCommand");
        }
    }

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

  private void InitialiseBtnCommands()
    {
        CloseWindowCommand = new BtnCommand(CloseWindowCommandAction);         
    }

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

 private void CloseWindowCommandAction()
        {
            //Save your data etc.                
        }