Silverlight チェックボックスの双方向バインディングが期待どおりに機能しない
-
20-09-2019 - |
質問
Silverlight 3.0でチェックボックスの双方向データバインディングを設定する際に単純な問題があります。当たり前のことですが、今日は脳を家に忘れてしまったのかもしれません…。
を表す 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 は基になるデータの変更に気付かなくなります。
どうすればよいでしょうか:
- 起動時にチェックボックスをデータにバインドする
- 基になるデータを変更するには、チェックボックス IsChecked を変更します。
- チェックボックスは基礎となるデータの変更を検出し、それ自体を更新しますか?
解決
あなたは、設定されたプロパティプロシージャでシーケンスエラーを持っている、あなたが前の _value
に割り当てる必要があるの変更を通知する: -
set
{
this._value = value;
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs("Value"));
}
所属していません StackOverflow