【发布时间】:2010-07-03 03:00:19
【问题描述】:
我正在 WPF 中创建一个基本的数据库应用程序,并且我已经开始使用 MVVM 模式。
我有一个对话框,要求用户从ListBox 中选择一个项目,然后单击“确定”。之后,我从视图模型中的属性中获取用户单击的项目并将其传递到另一个对话框。但是如果用户单击“取消”,我将该值设置为null,并且该操作被取消:我不打开下一个对话框并返回到主屏幕。示例:
public class SelectEquipmentViewModel : WorkspaceViewModel
{
private bool _selected;
public Equipment SelectedEquipment
{
// Item selected by the user
}
// Action for "SelectCommand," which is attached to
// the "Select" button in the view
public void ExecuteSelect()
{
_selected = true;
// Fires a RequestClose event in WorkspaceViewModel,
// which is attached to the view's Close method
RequestClose();
}
public override void RequestClose()
{
if (!_selected)
{
// The user clicked "Cancel"
SelectedEquipment = null;
}
base.RequestClose();
}
}
这一直很好用,但是如果用户单击窗口控制框中的红色“X”关闭按钮,就会出现问题。 RequestClose 方法永远不会被调用,并且所选项目没有设置为 null,这很糟糕。
我考虑将视图模型附加到视图的 Closing 事件,但我觉得如果我开始为所有这些事件创建处理程序,这可能会变得混乱。
处理这种情况的“首选”方式是什么?
谢谢。
【问题讨论】: