【发布时间】:2016-08-09 00:06:24
【问题描述】:
当一个项目的 Command 属性绑定到 ICommand 时,您可以期望它的启用状态依赖于 ICommand.CanExecute。我想做的是创建一个从 ICommand 继承的接口,它提供一个“MayExecute”来为控制可见性做同样的事情。有没有一种干净的方法可以在不有效地重新编译 .NET 的情况下做到这一点?
【问题讨论】:
当一个项目的 Command 属性绑定到 ICommand 时,您可以期望它的启用状态依赖于 ICommand.CanExecute。我想做的是创建一个从 ICommand 继承的接口,它提供一个“MayExecute”来为控制可见性做同样的事情。有没有一种干净的方法可以在不有效地重新编译 .NET 的情况下做到这一点?
【问题讨论】:
我会考虑使用附加属性来执行此操作。我认为这是可行的(也很酷)。
附加属性将有一个方法来检查目标控件上的Command 的值是否实现IVanishingCommand 或任何你称之为的方法。如果是这样,它订阅MayExecuteChanged 并酌情覆盖控件的可见性。
当Command 获得新值时,您将再次调用该方法(并确保取消订阅旧的Command 事件)。
使用反射获取控件的Command依赖属性;例如,Button 和MenuItem 不要都从任何公共基类继承Command。
您也可以使用 Style 中的触发器来执行此操作 - 但在所有这些不同样式中执行此操作很快就会变得很糟糕。
【讨论】: