按“X”

时间:2016-08-02 08:38:44

标签: c# wpf mvvm

我有一个使用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>

0 个答案:

没有答案