Почему не удалось выполнить привязку OneWay к свойству ToggleButton IsChecked? - PullRequest
3 голосов
/ 03 февраля 2011

ToggleButton поддерживает ICommand, поэтому я создаю много команд, таких как TogglePlayPause, ToggleMute, и они работают нормально, но мне нужно также связать свойство IsChecked, чтобы его проверенное состояние всегда показывало правильное состояние. но когда я создаю режим привязки OneWay для ToggleButton и когда я нажимаю ToggleButton, привязка будет потеряна.

Вопрос в том, почему ToggleButton поддерживает ICommand, но не поддерживает привязку OneWay? Я могу установить привязку TwoWay, но это плохая идея, когда ToggleButton использует Command, потому что фактическая операция обрабатывается Command, и она не должна дублироваться привязкой TwoWay, также иногда это невозможно. в моем случае Command = TogglePlayPause IsChecked = {Привязать к IsMediaPlaying} IsMediaPlaying должен быть доступен только для чтения.

Так скажите, пожалуйста, как использовать ToggleButton с Command и связать его свойство IsChecked?

1 Ответ

4 голосов
/ 03 февраля 2011

Вы можете написать свой собственный 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, элемент управления будет выглядеть и вести себя нормально.

...