WPF / MVVM Light Toolkit でウィンドウを閉じるイベントを処理する 質問する

WPF / MVVM Light Toolkit でウィンドウを閉じるイベントを処理する 質問する

Closing最終的に確認メッセージを表示したり、閉じることをキャンセルしたりするために、ウィンドウのイベント (ユーザーが右上の「X」ボタンをクリックしたとき) を処理したいと思います。

コード ビハインドでこれを行う方法はわかっています。Closingウィンドウのイベントをサブスクライブしてから、CancelEventArgs.Cancelプロパティを使用します。

しかし、私は MVVM を使用しているので、それが良いアプローチであるかどうかはわかりません。

良いアプローチとしては、イベントをViewModelClosingにバインドすることだと思います。Command

私はそれを試しました:

<i:Interaction.Triggers>
    <i:EventTrigger EventName="Closing">
        <cmd:EventToCommand Command="{Binding CloseCommand}" />
    </i:EventTrigger>
</i:Interaction.Triggers>

ViewModel に関連付けられていますRelayCommandが、機能しません (コマンドのコードが実行されません)。

ベストアンサー1

View コンストラクターでハンドラーを関連付けるだけです。

MyWindow() 
{
    // Set up ViewModel, assign to DataContext etc.
    Closing += viewModel.OnWindowClosing;
}

次に、ハンドラーを に追加しますViewModel

using System.ComponentModel;

public void OnWindowClosing(object sender, CancelEventArgs e) 
{
   // Handle closing logic, set e.Cancel as needed
}

この場合、より多くの間接性を持つより複雑なパターン (XAML の 5 行の追加とCommandパターン) を使用することで、複雑さ以外にはまったく何も得られません。

「ゼロコードビハインド」というマントラはそれ自体が目標ではなく、ポイントはViewModelをViewから分離するイベントがビューのコードビハインドにバインドされている場合でも、ViewModelビューと終了ロジックには依存しません。ユニットテストが可能

おすすめ記事