自动将事件绑定到依赖属性值

本文关键字:依赖 属性 绑定 事件 | 更新日期: 2023-09-27 18:08:08

我正在尝试从ToggleButton控件派生出一个自定义用户控件。

我想设置两个新命令,CheckedCommand和UncheckedCommand。

我已经定义了如下命令,并且能够绑定到它们。我要通过一些内部事件解雇他们。

然而,我希望能够有这些命令禁用按钮作为通常的命令界面与CanExecute。正如我所理解的,我需要使用CanExecuteChanged事件并在这里设置IsEnabled属性。然而,当我应该绑定此事件时,我查看了使用DependancyPropertyPropertyChangedCallback事件,但是我如何从任何先前绑定的命令中取消订阅。

最后看起来有点复杂,是我错过了一些简单的东西,还是这就是它的方式。

        [Description("Checked Command"), Category("Common Properties")]
        public ICommand CheckedCommand
        {
            get { return (ICommand)this.GetValue(CheckedCommandProperty); }
            set { this.SetValue(CheckedCommandProperty, value); }
        }
        public static readonly DependencyProperty CheckedCommandProperty = DependencyProperty.Register(
          "CheckedCommand", typeof(ICommand), typeof(ToggleTextButton));

自动将事件绑定到依赖属性值

我可能不了解您的具体要求,但一般情况下我不会这样做。WPF主要被设计为数据驱动的,而这里实现的是事件驱动的通知。事件是旧式WinForms处理事情的方式,添加事件主要是为了方便从WinForms过渡到新的数据绑定架构。

在我看来,一个更"正确"的解决方案是公开一个布尔依赖属性,即基本上与复选框中的"Checked"属性相同。然后,控件的用户可以将该属性绑定到视图模型中的布尔属性,该视图模型的setter将在状态更改时调用。第二个"Enabled"DP将允许您和您的用户控制是否应该启用该控件,再次类似于在Checkbox中实现的方式。

问一个明显的问题,如果它的复选框功能之后,你为什么不只是模板复选框?你真的需要一个用户控制来实现你想要实现的目标吗?