- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我需要刷新一个或多个(尽管目前还不是全部)RoutedCommand
对象的 CanExecute
状态。
我知道you can update all commands通过使用
CommandManager.InvalidateRequerySuggested();
由于这会更新比必要的命令多得多的命令,因此在我的应用程序中调用此函数有时会出现性能问题。
我最初的希望是,如果状态发生变化,手动调用 CanExecute()
也会引发事件,但事实并非如此。
然后查看引用源时,派生类似乎无法访问 CanExecuteChanged
来为 RoutedCommand
类提供某种扩展,从而允许提高手动事件。
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
关于如何实现这种机制的任何想法?我知道 DelegateCommand
,但我需要一个路由命令,所以我认为这个类对我没有帮助。
最佳答案
您可以创建自己的自定义 RoutedCommand
,重新实现 ICommand
并自己注册一个附加事件。请注意,在这里使用 new
应该是安全的,因为 WPF 将使用 ICommand
引用来调用 CanExecuteChanged
。
public class MyRoutedCommand : RoutedCommand, ICommand
{
private event EventHandler _canExecuteChanged;
public void RaiseCanExecuteChanged()
{
var handler = _canExecuteChanged;
if (handler != null) handler(this, EventArgs.Empty);
}
public new event EventHandler CanExecuteChanged
{
add
{
_canExecuteChanged += value;
base.CanExecuteChanged += value;
}
remove
{
_canExecuteChanged -= value;
base.CanExecuteChanged -= value;
}
}
}
您应该知道,虽然 WPF 将使用 WeakEventManager
来注册此事件,但其他开发人员可能不会。由于路由命令通常定义为静态字段,这可能是潜在的内存泄漏。您可以实现弱事件管理器来防止这种情况。
关于c# - 如何重新查询单个 RoutedCommand 的 'CanExecute'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23262497/
我的问题是我想在多个地方处理命令。例如,我有自定义用户控件,其中按钮绑定(bind)到某个命令。我在该控件中有一个命令绑定(bind),但在使用此控件的窗口中也有一个命令绑定(bind)。 我的目标是
我在一个应用程序中有多个窗口,例如 window1、window2 和 window3。 在 window1 中绑定(bind)了一个 RoutedCommand(使用 KeyGesture F11)
我正在尝试使用 RoutedCommand,但我遇到了一个问题,我无法找到如何传递参数以便我的 Executed 方法将它包含在 e .参数 ? 我的路由命令: public static reado
我有一个公开自定义命令的自定义控件 (MyControl)。我希望父 Window 能够调用此命令,并且所有 MyControls 都应该对此使用react。 我已将命令添加到 MyControl 的
我想了解路由命令的工作原理,但我遇到了问题。我创建了一个带有 Button 的主窗口和带有 UserControls 的 ItemControl 作为其 Item 模板。
让我们将按钮 Command 属性绑定(bind)到自定义命令。 何时应该实现 ICommand 以及何时从 RoatedCommand 派生?我看到 RoatedCommand 实现了 IComma
RoatedCommand 的构造函数将“所有者类型”作为最后一个参数。其意义何在?什么时候使用? MSDN 文档完全没有说明为什么需要它以及我是否可以对所有命令使用一种类型 引自MSDN owner
我正在尝试学习 MVVM 软件设计模式。我有 Matthew MacDonald 的书“Pro WPF in C# 2010”来更好地学习 WPF。在尝试开始学习 MVVM 时,我查看了 Window
我正在使用 WPF 使用 MVVM 设计模式。我有一个 ContextMenu ListView 上有几件元素.基于 ListView 中选择的项目数, 我想启用/禁用某些 MenuItem s。有没
RoutedCommand类有一个 Name可以在构造函数中设置的属性。 MSDN 对 RoutedCommand.Name 有这样的说法: This property can be used whe
我需要刷新一个或多个(尽管目前还不是全部)RoutedCommand 对象的 CanExecute 状态。 我知道you can update all commands通过使用 CommandMana
无论如何,在构建复合 WPF 应用程序时,DelegateCommand 是否支持手势?我正在尝试创建一个 MenuItem 和一个 Button 使用的命令,它可以通过键盘快捷键访问,但它位于单独程
RoutedCommand 和 RoutedUICommand 对他们有很大帮助。内置对文本和键盘手势的支持。您可以将 RoutedUICommands 集合绑定(bind)到菜单的 ItemsSou
我有一个 WPF 应用程序,我试图以 MVVM 模式(尽可能)实现它。我的一个 View 模型打开一个子窗口,代码如下: SomeChildWindow childWin = new SomeChil
是否可以在 Silverlight 4 beta 版本中使用 RoutedCommand,例如 ApplicationCommand.Copy、ApplicationCommand.Paste 等?
我有一个绑定(bind)到 ListCollectionView 的 ListView。 在同一个窗口中,我有一个 Button,它带有一个附加的 RoutedCommand,没有 CanExecut
我正在努力了解在 WPF 中使用 Custom RoutedCommands 比标准事件有什么好处。 假设我有一个在静态类中声明的自定义 RoutedCommand,如下所示: public stat
如何触发嵌套在 ContentControl 内的 UserControl 内实现的路由命令? 我基本上拥有的是一个外部 View (源自 UserControl),其中包含: 1) 应该触发命令 M
我有一组 ViewModel,它们呈现为选项卡,使用一种样式来提取相关内容以显示在选项卡上: public class TabViewModel : DependencyObject {
在 WPF/MVVM 应用程序中,我试图找到一种代码高效的方法来将主 View 光标设置为 Cursors.Wait在任何冗长的操作之前,并在完成后将其恢复到默认光标。 由于所有操作都是使用路由命令调
我是一名优秀的程序员,十分优秀!