gpt4 book ai didi

c# - 处理MVVM下WPF中的 "X"关闭按钮

转载 作者:行者123 更新时间:2023-11-30 18:08:25 25 4
gpt4 key购买 nike

我正在 WPF 中创建一个基本的数据库应用程序,并且我已经开始使用 MVVM 模式。

我有一个对话框,要求用户从 ListBox 中选择一个项目,然后单击“确定”。之后,我将用户从 View 模型中的属性中单击的项目传递给另一个对话框。但是,如果用户单击“取消”,我将该值设置为 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,这很糟糕。

我考虑过将 View 模型附加到 View 的 Closing 事件,但我觉得如果我开始为所有这些事件创建处理程序,这可能会变得困惑。

处理这种情况的“首选”方式是什么?

谢谢。

最佳答案

我认为使用 EventToCommand 行为将 Window 对象的 Closing 事件连接到新的 ExecuteCancel 命令是非常干净的。

public void ExecuteCancel() 
{
_selected = false;

// Fires a RequestClose event in WorkspaceViewModel,
// which is attached to the view's Close method
RequestClose();
}

你认为这会在什么地方变得困惑?如果添加取消按钮,它可以使用相同的 ExecuteCancel 位...

关于c# - 处理MVVM下WPF中的 "X"关闭按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3170153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com