RadioButton IsChecked теряет привязку - PullRequest
6 голосов
/ 21 ноября 2010

Я пытаюсь привязать свойство RadioButton.IsChecked, и оно работает только один раз. После этого привязка не работает, и я понятия не имею, почему это происходит. Кто-нибудь может помочь с этим? Спасибо!

Это мой код.

C #

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();

        this.DataContext = new ViewModel();
    }
}

public class ViewModel
{
    private bool _isChecked1 = true;
    public bool IsChecked1
    {
        get { return _isChecked1; }
        set
        {
            if (_isChecked1 != value)
            {
                _isChecked1 = value;
            }
        }
    }

    private bool _isChecked2;
    public bool IsChecked2
    {
        get { return _isChecked2; }
        set
        {
            if (_isChecked2 != value)
            {
                _isChecked2 = value;
            }
        }
    }
}

XAML:

<Grid>
    <StackPanel>
        <RadioButton Content="RadioButton1" IsChecked="{Binding IsChecked1}" />
        <RadioButton Content="RadioButton2" IsChecked="{Binding IsChecked2}" />
    </StackPanel>
</Grid>

Ответы [ 4 ]

5 голосов
/ 21 ноября 2010

Это печальная известная ошибка .Я предполагаю, что это было исправлено в WPF 4.0 с учетом нового DependencyObject.SetCurrentValue API, но не проверено.

1 голос
/ 22 мая 2015

Просто продолжение ответа Кента здесь ... на самом деле это было исправлено в WPF 4.0. Я использую это поведение в своем текущем проекте.Отключенная радиокнопка теперь получает значение привязки, равное false, вместо прерывания привязки.

1 голос
/ 19 июля 2013

Вот рабочее решение: http://pstaev.blogspot.com/2008/10/binding-ischecked-property-of.html. Жаль, что Microsoft не исправила эту ошибку.

0 голосов
/ 29 ноября 2010

Полагаю, вам нужно реализовать интерфейс INotifyPropertyChanged

public event PropertyChangedEventHandler PropertyChanged;

private void NotifyPropertyChanged(String info)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(info));
    }
}


private bool _isChecked1 = true;
public bool IsChecked1
{
    get { return _isChecked1; }
    set
    {
        if (_isChecked1 != value)
        {
            _isChecked1 = value;
            NotifyPropertyChanged("IsChecked1");
        }
    }
} // and the other property...

:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...