WPF toplevel MenuItem基于任务启用/禁用

时间:2010-12-06 21:51:54

标签: wpf click menuitem

我有一个顶级菜单项,负责在同一个窗口中刷新数据网格。我目前的控制流程是:

  1. 用户点击刷新
  2. 在点击事件处理程序中,我:
    1. 通过设置oMenuItem.IsEnabled = false
    2. 来停用菜单项
    3. 发送操作以刷新网格,在该操作中,我通过设置IsEnabled = true
    4. 重新启用menuitem
  3. 问题是用户可以点击刷新,即使它已被禁用,就像点击排队一样。当操作返回时,它继续处理剩余的“排队”点击。我期望的是:禁用菜单项时的所有点击都会被忽略,只有在启用时,才会确认点击次数。

    奇怪的是,如果我只是禁用它并且从不启用它就会保持这种状态,即它被禁用.wpf,

1 个答案:

答案 0 :(得分:1)

“调度动作”是指调用Dispatcher.BeginInvoke()还是其他某种异步操作?

无论如何,在这两种情况下,您都可以获得操作的“句柄”(DispatcherOperation或IAsyncResult),并在分派操作时将其存储为字段。完成后 - 将此字段设置为null。

在菜单项的单击事件处理程序中,选中此字段。如果它为null,则表示启动操作是安全的。如果它不为null - 立即返回并且什么也不做。

与您的问题无关但又重要的事情 - 为什么不使用命令?这样您就不需要使用事件处理和启用/禁用。当然,命令可以通过多种方式调用(例如 - 用户使用键盘从菜单中选择命令并按Enter键。不涉及鼠标点击,但应该像点击菜单项一样)。

亚历。