ViewModelとの間でメッセージを渡すだけです。
表示:
private void Window_Closing(object sender, CancelEventArgs e)
{
Messenger.Default.Send(new WindowRequestsClosingMessage(
this,
null,
result =>
{
if (!result)
e.Cancel = true;
});
}
ViewModel:
Messenger.Default.Register<WindowRequestsClosingMessage>(
this,
msg =>
{
// Your logic before close
if (CanClose)
msg.Execute(true);
else
msg.Execute(false);
});
メッセージ:
public class WindowRequestsClosingMessage: NotificationMessageAction<bool>
{
public WindowRequestsClosingMessage(string notification, Action<bool> callback)
: base(notification, callback)
{
}
public WindowRequestsClosingMessage(object sender, string notification, Action<bool> callback)
: base(sender, notification, callback)
{
}
public WindowRequestsClosingMessage(object sender, object target, string notification, Action<bool> callback)
: base(sender, target, notification, callback)
{
}
}
MVVMLightのNotificationMessageAction<TResult>を使用すると、メッセージを渡してTResultタイプの結果を取得できます。TResultをリクエスターに戻すにはExecute()
、例のように呼び出します。