2010-11-21 21 views
6

Próbuję powiązać właściwość RadioButton.IsChecked i działa tylko raz. Po tym wiązaniu nie działa już i nie mam pojęcia, dlaczego tak się dzieje. Czy ktoś może w tym pomóc? Dzięki!RadioButton IsChecked traci wiązanie

To jest mój kod.

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> 

Odpowiedz

5

To niefortunne known bug. Zakładam, że zostało to naprawione w WPF 4.0 ze względu na nowy interfejs API DependencyObject.SetCurrentValue, ale nie zostało zweryfikowane.

+1

Ach, to po prostu okropne. Chyba będę musiał wrócić do obsługi zdarzeń ... znasz jakieś obejścia poza tym? – Carlo

+0

Użyj 'ListBox' i stylu każdego' ListBoxItem' wyglądać jak 'RadioButton'. http://code.msdn.microsoft.com/wpfradiobuttonlist –

0

Chyba trzeba implementować interfejs 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... 

:)

+0

Próbowałem tego i to nie działa. Dzieki za sugestie. – Carlo

1

Po tym, jak odpowiedziałem na odpowiedź Kenta tutaj ... zostało to naprawione w WPF 4.0. Wykorzystuję to zachowanie w moim obecnym projekcie. Przycisk opcji, który jest deaktywowany, teraz otrzymuje wartość wiązania ustawioną na wartość false, zamiast zerwać wiązanie.