我有一个使用MVVM的WPF应用程序。 我需要将窗口出口(“X”)绑定到我的viewModel中的取消命令。 我的表单上有一个取消按钮,它使用相同的命令关闭窗口。 单击“X”后,我的关闭事件被调用两次(首先从事件触发器(XAML)关闭,然后从cancel命令关闭),应用程序抛出异常。
以下是一些代码:
public ICommand CancelCommand {
get {
return _cancel ?? (_cancel = new RelayCommand(o =>
{
bool result = false;
if (_protocolSettingsModel.IsDirty || _overridesModel.IsDirty || _mappingsModel.IsDirty || _csvMappingsModel.IsDirty || _generalModel.IsDirty)
{
result = MessageBoxTemplates.Changes();
if (result)
{
OnClosingRequest();
}
else
{
return;
}
}
else
{
OnClosingRequest();
}
}));
}
set {
_cancel = value;
}
}
这是命令。现在window.cs代码:
public SimulationWindow(ManageSimulationViewModel vm) {
InitializeComponent();
DataContext = (_simulationModel = vm);
_simulationModel.ClosingRequest += (sender, e) => Close();
}
和XAML:
<i:Interaction.Triggers>
<i:EventTrigger EventName="Closing">
<i:InvokeCommandAction Command="{Binding CancelCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>