2

我有一個簡單的問題,在Silverlight 3.0中設置複選框的雙向數據綁定。它一定是一個無腦的,但可能我今天忘了我的大腦家園...Silverlight複選框雙向綁定不能按預期工作

我定義了一個Model類來表示我的'數據'。我實現了INotifyPropertyChanged接口以使UI能夠查看數據何時更改。

public class Model : INotifyPropertyChanged 
{ 
    private bool _value; 
    public bool Value 
    { 
     get { return this._value; } 
     set 
     { 
      if (this.PropertyChanged != null) 
       this.PropertyChanged(this, new PropertyChangedEventArgs("Value")); 
      this._value = value; 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 

接下來,我把一個複選框和.. '形式' 上的按鈕:

<StackPanel Orientation="Horizontal"> 
     <CheckBox x:Name="check" IsChecked="{Binding Value, Mode=TwoWay}" Content="SomeLabel"/>  
     <Button Click="Button_Click" Content="Test" /> 
    </StackPanel> 

然後我提供在構造函數中的數據:

public MainPage() 
    { 
     InitializeComponent(); 

     this.DataContext = new Model() { Value = true }; 
    } 

的問題是,除非我解除實施INotifyPropertyChanged,否則必須在複選框上單擊兩次以選中/取消選中。但是,如果解除執行它,則UI不會注意是否更改了基礎數據。

如果我從IsChecked綁定表達式中移除Mode = TwoWay位,那麼即使Model正在實現接口,UI也不會注意到基礎數據更改。

我該怎麼做才能:

  1. 必須在啓動
  2. 綁定到數據的複選框有複選框器isChecked變化修改基礎數據
  3. 有複選框檢測到基礎數據的變化和更新自己?

回答

8

您已在設定財產過程中有一個排序的錯誤,你需要分配到_value之前通知的變化: -

set 
    { 
     this._value = value; 
     if (this.PropertyChanged != null) 
      this.PropertyChanged(this, new PropertyChangedEventArgs("Value")); 

    } 
+0

謝謝!有效。我告訴過你我今天忘了我的大腦:)) – 2009-09-01 11:14:25