为什么不能将OneWay绑定到ToggleButton IsChecked属性?

时间:2011-02-03 00:55:09

标签: wpf binding togglebutton

ToggleButton支持ICommand,所以我创建了许多命令,如TogglePlayPause,ToggleMute,它工作正常但我需要绑定IsChecked属性,所以它的检查状态总是显示正确的状态。但是当我为ToggleButton创建OneWay绑定模式时,当我按下ToggleButton时,绑定将丢失。

问题是为什么ToggleButton支持ICommand但不支持OneWay绑定? 我可以设置TwoWay绑定,但是当ToggleButton使用Command时,这是个坏主意,因为Command处理的实际操作不应该与TwoWay绑定重复,有时也是不可能的。在我的情况下 命令= TogglePlayPause IsChecked = {Bind to IsMediaPlaying} IsMediaPlaying应该是readonly。

那么请告诉我如何在命令中使用ToggleButton并绑定其IsChecked属性?

1 个答案:

答案 0 :(得分:4)

您可以通过从OneWayToggleButton派生来编写自己的ToggleButton,并覆盖单击按钮时发生的情况:

public class OneWayToggleButton : ToggleButton
{
    protected override void OnClick()
    {
        RaiseEvent(new RoutedEventArgs(ClickEvent, this));
        if (Command != null && Command.CanExecute(CommandParameter))
            Command.Execute(CommandParameter);
    }
}

然后IsChecked将不会被按钮本身修改,只能通过绑定进行更改。但是因为我们仍在使用IsChecked的{​​{1}}属性,所以控件的外观和行为都会正常。