我正在开发一个WPF MVVM应用程序,该应用程序使用 MVVMLightToolkit 作为第三方帮助程序。我的情节如下:
我有一个主窗口,在关闭主窗口时,我必须显示一个新的对话窗口(保存更改对话框窗口)以确认用户是否必须保存更改他在申请中提交了州档案或不。如何在MVVM中处理这种情况?通常,为了显示一个新窗口,我正在使用MVVMLight Messenger 类。在这种情况下,我将从主窗口打开保存更改对话框窗口 代码隐藏。我需要根据保存更改对话框窗口中的所选用户选项(SAVE,SAVE / EXIT,CANCEL)回调主视图模型,并根据我必须检查是否必须关闭主窗口与否。处理这种情况的最佳MVVM方法是什么?
答案 0 :(得分:1)
只需从/向ViewModel传递消息。
查看强>:
private void Window_Closing(object sender, CancelEventArgs e)
{
Messenger.Default.Send(new WindowRequestsClosingMessage(
this,
null,
result =>
{
if (!result)
e.Cancel = true;
});
}
<强>视图模型强>:
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)
{
}
}
MVVM Light的 NotificationMessageAction&lt; TResult&gt; 允许您传递消息并获得TResult类型的结果。要将TResult传递回请求者,请像示例一样调用Execute()
。
答案 1 :(得分:0)
为什么不在Closing-Event中执行以下操作:
private void Window_Closing(object sender, CancelEventArgs e)
{
SaveDialog sd = new SaveDialog();
if (sd.ShowDialog() == false)
{
e.Cancel = true;
}
}