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を実装解除しない限り、チェックボックスを2回クリックしてチェック/チェックを外さなければなりません。しかし、それを実装解除すると、UIは基になるデータを変更するかどうか通知しません。

IsCheckedバインディング式からMode = TwoWayビットを削除すると、モデルがインターフェイスを実装している場合でも、UIは基になるデータの変更を認識しません。私が行うことができますどのように

  1. が起動
  2. でデータにバインドされたチェックボックスは、基礎となるデータ
  3. を変更するには、チェックボックスにisChecked変化があり、チェックボックスは、基礎となるデータの変化を検出しており、自分自身を更新する?

答えて

8

あなたが設定したプロパティプロシージャでシーケンスエラーを持っている、あなたが変更を通知する前_valueに割り当てる必要があります: -

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

    } 
+0

感謝!出来た。私は今日私の脳の家を忘れてしまったと言った) –

関連する問題