4

ToggleButtonはICommandをサポートしているので、TogglePlayPause、ToggleMuteなどの多くのコマンドを作成します。これは正常に機能しますが、IsCheckedプロパティもバインドする必要があるため、チェックされた状態は常に正しい状態を示します。しかし、ToggleButtonのOneWayバインディングモードを作成し、ToggleButtonを押すと、バインディングが失われます。

問題は、ToggleButtonがICommandをサポートしているのに、OneWayバインディングをサポートしていない理由です。TwoWayバインディングを設定することはできますが、ToggleButtonがCommandを使用する場合はお勧めできません。これは、Commandによって処理される実際の操作であり、TwoWayバインディングと重複してはならないためです。また、それが不可能な場合もあります。私の場合、Command = TogglePlayPause IsChecked = {Bind toIsMediaPlaying}IsMediaPlayingは読み取り専用である必要があります。

では、コマンドでToggleButtonを使用し、その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 に答える