禁用基于WPF命令/命令绑定的控件

禁用基于WPF命令/命令绑定的控件,wpf,commandbinding,Wpf,Commandbinding,使用命令很方便,因为当命令无法执行时,WPF会自动禁用命令源(通常是一个按钮) 显然,此功能不适用于非命令源的控件,例如ListBox 为非命令源控件启用此功能的最佳方式是什么。我想到了几个解决方案: 用按钮包裹列表框,并更改按钮的控制模板,使其不存在铬 创建一个不可见的按钮,并将列表框的IsEnabled属性绑定到按钮的IsEnabled属性 创建实现ICommandSource的ListBox的子体 有更优雅的方法吗?您可以在代码隐藏(或视图模型)中创建bool属性,如可以选择或可以编辑

使用命令很方便,因为当命令无法执行时,WPF会自动禁用命令源(通常是一个按钮)

显然,此功能不适用于非命令源的控件,例如
ListBox

为非命令源控件启用此功能的最佳方式是什么。我想到了几个解决方案:

  • 按钮
    包裹
    列表框
    ,并更改按钮的
    控制模板
    ,使其不存在铬
  • 创建一个不可见的
    按钮
    ,并将
    列表框的
    IsEnabled
    属性绑定到
    按钮的
    IsEnabled
    属性
  • 创建实现
    ICommandSource
    ListBox
    的子体

有更优雅的方法吗?

您可以在代码隐藏(或视图模型)中创建bool属性,如
可以选择
可以编辑
,并将
列表框的
IsEnabled
属性绑定到它。只需在相应命令的
CanExecute
方法中设置此新属性的值。

您可以在代码隐藏(或视图模型)中创建一个bool属性,如
可以选择
CanEdit
,并将
列表框的
IsEnabled
属性绑定到它。只需在相应命令的
CanExecute
方法中设置此新属性的值。

谢谢您的回答。CanExecute方法从何而来?我指的是WPF用来确定命令是否可以执行的ICommand.CanExecute方法()。那么谁会叫ICommand.CanExecute呢。如果命令附加到一个按钮,WPF将执行此任务(我的观点#2)。否则,这将如何工作?嗯,我不知道你是否需要一个命令毕竟,我以为你已经有一个,你可以从那里改变你的新财产。也许你可以给我们更多的细节和一些你想要完成的代码…谢谢你的回答。CanExecute方法从何而来?我指的是WPF用来确定命令是否可以执行的ICommand.CanExecute方法()。那么谁会叫ICommand.CanExecute呢。如果命令附加到一个按钮,WPF将执行此任务(我的观点#2)。否则,这将如何工作?嗯,我不知道你是否需要一个命令毕竟,我以为你已经有一个,你可以从那里改变你的新财产。也许你可以给我们更多的细节和一些你想要完成的代码。。。