2016-01-06 2 views
1

Я пытаюсь применить двустороннюю привязку к радиообъекту в WPF. В XAML у меня есть следующие:XAML TwoWay Binding RadioButton IsChecked

<RadioButton IsChecked="{Binding IsActive, Mode=TwoWay}"/> 

и в соответствующем ViewModel у меня есть

private bool _isActive; 

public bool IsActive 
{ 
    get { return _isActive; } 
    set 
    { 
     _isActive = value; 
     OnPropertyChanged("IsActive"); 
    } 
} 

Потому что режим установлен в TwoWay я ожидал, что, как я Переключите RadioButton в IsActive свойство в модели представления будет соответствующим образом обновляться. Тем не менее, value в set из IsActive всегда правдиво, поэтому радиобюджет всегда включен.

Я недопонимаю TwoWay недвижимость для радиатора, и если да, то как мне добиться желаемого эффекта?

+0

Вы правы в своих предположениях, и привязка IsChecked является TwoWay по умолчанию, поэтому вам не нужно указывать ее в привязке. Здесь должно быть что-то другое, может быть, другая радиокнопка вызывает его изменение. Можете ли вы использовать точку останова в наборе IsActive, чтобы узнать, как изменяется значение свойства? –

+0

У этой проблемы нет CheckBox, которая также наследуется от ToggleButton. Я мог бы это использовать. –

+0

@GlenThomas - Свойство value всегда верно. Замена RadioButton на CheckBox дает правильное поведение, т. Е. Переключает между true и false. –

ответ

1

Вы не можете на самом деле переключить один RadioButton, щелкнув по нему. Вы можете использовать флажок или ToggleButton здесь.

Если вы хотите использовать RadioButtons, вам придется использовать как минимум два из них. Внутри сеттера для каждого свойства IsActive RadioButton вам нужно отключить другие кнопки.

Существуют и другие альтернативы, вы можете, например, привязать все RadioButtons к одному свойству enum и использовать конвертер. Например, см.: http://wpftutorial.net/RadioButton.html

+0

Полезно знать. Использовать CheckBox –

Смежные вопросы