我正在尝试设置从ToggleButton控件派生的自定义用户控件。
我想设置两个新命令,CheckedCommand和UncheckedCommand。
我已经定义了如下命令,并且能够绑定它们。我正在通过一些内部事件解雇他们。一切都很好。
但是我希望能够让这些命令禁用按钮,就像通常的命令接口使用CanExecute一样。据我所知,我需要使用CanExecuteChanged事件并在此处设置IsEnabled属性。但是,当我想绑定此事件时,我查看了使用PropertyChangedCallback
的{{1}}事件,但之后如何取消订阅以前绑定的任何命令。
这一切看起来有点复杂,我错过了一些简单的东西,或者这只是它的方式。
DependancyProperty
答案 0 :(得分:0)
我可能不了解您的具体要求,但总的来说,我不会这样做。 WPF主要设计为数据驱动,而在这里您实现了事件驱动的通知。事件是老式的WinForms处理方式,它们的添加主要是为了便于从WinForms轻松过渡到新的数据绑定架构。
IMO这里更“正确”的解决方案是公开一个布尔依赖属性,即与复选框中的“Checked”属性基本相同。然后,您的控件的用户可以将该属性绑定到其视图模型中的布尔属性,只要状态发生更改,就会调用其setter。第二个“启用”DP将允许您和您的用户控制是否应该启用控件,再次类似于它在Checkbox中的实现方式。
要问一个明显的问题,虽然它是你的复选框功能,那么为什么你不只是模板复选框?你真的需要一个用户控制来实现你想要实现的目标吗?