2009-09-15 65 views
1

使用命令非常方便,因为当命令无法执行时,WPF会自动禁用命令源(通常为按钮)。基于WPF命令/命令绑定禁用控件

很明显,该功能不适用于不是命令源的控件,例如ListBox

对非命令源控件启用此功能的最佳方法是什么?我认为一对夫妇的解决方案的:

  • 包裹ListBoxButton和更改按钮的ControlTemplate所以不存在铬。
  • 创建一个无形的ButtonListBoxIsEnabled属性绑定到的Button
  • IsEnabled属性创建的ListBox后代实现ICommandSource

有没有更优雅的方式?

回答

4

您可以创建一个像CanSelectCanEdit在您的代码隐藏(或视图模型)一个布尔值属性,你的ListBoxIsEnabled属性绑定到它。只需在相应命令的CanExecute方法中设置此新属性的值即可。

+0

感谢您的回答。 CanExecute方法来自哪里? – 2009-09-15 17:50:31

+0

我指的是WPF使用ICommand.CanExecute方法(http://msdn.microsoft.com/zh-cn/library/system.windows.input.icommand.canexecute.aspx)来确定命令可以执行或不执行。 – 2009-09-15 18:04:42

+0

明白了。那么谁会打电话给ICommand.CanExecute。如果该命令附加到按钮上,WPF将执行该任务(我的要点#2)。否则,这将如何工作? – 2009-09-15 22:48:20