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
ビューと終了ロジックには依存しません。ユニットテストが可能。