4

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

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

那么请告诉我如何将 ToggleButton 与 Command 一起使用并绑定其 IsChecked 属性?

4

1 回答 1

5

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属性ToggleButton,所以控件的外观和行为都会正常。

于 2011-02-03T06:08:02.753 回答