Wpf 为什么不能对ToggleButton IsChecked属性进行单向绑定?

Wpf 为什么不能对ToggleButton IsChecked属性进行单向绑定?,wpf,binding,togglebutton,Wpf,Binding,Togglebutton,ToggleButton支持ICommand,因此我创建了许多命令,如TogglePlayPause、ToggleMute,它工作正常,但我也需要绑定IsChecked属性,以便其选中状态始终显示正确的状态。但是,当我为ToggleButton创建单向绑定模式并按下ToggleButton时,绑定将丢失 问题是为什么ToggleButton支持ICommand,但不支持单向绑定? 我可以设置双向绑定,但切换按钮使用命令时这是个坏主意,因为实际操作由命令处理,不应该使用双向绑定进行复制,有时也不可

ToggleButton支持ICommand,因此我创建了许多命令,如TogglePlayPause、ToggleMute,它工作正常,但我也需要绑定IsChecked属性,以便其选中状态始终显示正确的状态。但是,当我为ToggleButton创建单向绑定模式并按下ToggleButton时,绑定将丢失

问题是为什么ToggleButton支持ICommand,但不支持单向绑定? 我可以设置双向绑定,但切换按钮使用命令时这是个坏主意,因为实际操作由命令处理,不应该使用双向绑定进行复制,有时也不可能。就我而言 命令=切换播放暂停 IsChecked={Bind to IsMediaPlaying} IsMediaPlaying应该是只读的


因此,请告诉我如何将ToggleButton与命令一起使用并绑定其IsChecked属性?

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

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

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

我不能使用此属性,因为其他人创建的接口和我的DLL都没有。我使用代码进行动态绑定,因此无法使用自己的重写类。然后使用自己的中间属性进行双向绑定,并在绑定更改时将其设置回正确的值。实际上,我已经使用非空集合评估器应用双向绑定,但这看起来不是一个好的解决方案,当然可以,但我应该更改所有框架只读属性,只用于切换按钮。我认为Silverlight团队应该在没有其他方法的情况下解决这个问题。您建议如何使用中间属性?我尝试让命令设置一个属性,并将IsChecked绑定到该属性,但没有成功。无论绑定如何,用户交互仍会打开/关闭按钮。不过,OneWayToggleButton解决方案非常有效!