2010-11-21 29 views
6

Tôi đang cố gắng liên kết với thuộc tính RadioButton.IsChecked và nó chỉ hoạt động một lần. Sau đó, ràng buộc không làm việc gì cả, và tôi không biết tại sao điều này lại xảy ra. Bất cứ ai có thể giúp đỡ với điều này? Cảm ơn!RadioButton IsChecked mất ràng buộc

Đây là mã của tôi.

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> 

Trả lời

5

Đây là một bất hạnh known bug. Tôi giả định rằng điều này đã được sửa trong WPF 4.0 với API DependencyObject.SetCurrentValue mới, nhưng chưa được xác minh.

+1

Ah điều đó thật khủng khiếp. Tôi đoán tôi sẽ phải quay trở lại xử lý sự kiện ... bạn biết của bất kỳ cách giải quyết bên cạnh đó? – Carlo

+0

Sử dụng 'ListBox' và tạo kiểu cho mỗi' ListBoxItem' trông giống như một 'RadioButton'. http://code.msdn.microsoft.com/wpfradiobuttonlist –

0

Tôi đoán bạn cần phải thực hiện các giao diện 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

Đã thử và nó không hoạt động. Cám ơn vì sự gợi ý. – Carlo

1

Chỉ cần theo dõi câu trả lời của Kent ở đây ... điều này đã được sửa trong WPF 4.0. Tôi đang tận dụng hành vi này trong dự án hiện tại của mình. Nút radio được khử kích hoạt hiện nay nhận giá trị ràng buộc của nó được đặt thành false, thay vì phá vỡ ràng buộc.

Các vấn đề liên quan