gpt4 book ai didi

c# - 使用 ContextMenu 的 RaiseCanExecuteChanged 延迟

转载 作者:太空狗 更新时间:2023-10-29 23:52:05 26 4
gpt4 key购买 nike

在我的 WPF 应用程序中,我有一种节点图。我已经向这些节点添加了一个 ContextMenu,当我右键单击内容等时会出现。

上下文菜单中的命令来自具有 DelegateCommands 的服务 (Microsoft.Practices.ServiceLocation.ServiceLocator),并且这些命令使用 RaiseCanExecuteChanged( )。右键单击的节点被传递到此命令服务,该服务用于命令的各种 CanExecute 方法。

节点都有一些在这些条件下使用的属性,比如是否可以重命名或删除等。

    private void ContextMenu_ContextMenuOpening(object sender, RoutedEventArgs e) {
ServiceLocator.Current.GetInstance<IMenuCommandService>().ReloadICommandConditions();
}

在 IMenuCommandService 中:

    public void ReloadICommandConditions() {
((DelegateCommand<Node>) MyCommand).RaiseCanExecuteChanged();
}

我的上下文菜单(在 DataTriggerSetter 中):

<ContextMenu>
<MenuItem Header="Rename"
Command="{Binding MenuCommandService.Rename}"
CommandParameter="{Binding Node}" />
<MenuItem Header="Delete"
Command="{Binding MenuCommandService.Delete}"
CommandParameter="{Binding Node}" />
...
</ContextMenu>

我的问题是,当我右键单击其中一个节点时,显示的上下文菜单看起来像是为所选的上一个 节点配置的。就像我右键单击一个可删除节点,然后右键单击一个不可删除节点,上下文菜单上的“删除”命令仍然可以单击。 (如果我然后右键单击不可删除的节点,上下文菜单将正确并且“删除”命令变灰。)

因此,从 RaiseCanExecuteChanged() 之后所做的更改实际到上下文菜单“获取”时,似乎存在某种延迟。我可以做一个粗略的修复,只在上下文菜单更新后显示它们(即它们的 CanExecute 方法已被调用),但我想保持这两部分相对独立。

我是否遗漏了一些明显的东西,我是否以错误的方式解决了这个问题,或者有人有任何其他建议吗?

谢谢

最佳答案

有点解决了——我现在通过 ReloadICommandConditions() 方法手动将右键单击的节点传递到我的 MenuCommandService,它是持有对它的本地引用,然后在其 CanExecute() 方法中使用该引用代替参数。粗糙,但至少它有效。

我暂时保持开放状态,以防有人知道更……优雅的方式。

关于c# - 使用 ContextMenu 的 RaiseCanExecuteChanged 延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12838745/

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