質問

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 は基になるデータの変更に気付かなくなります。

どうすればよいでしょうか:

  1. 起動時にチェックボックスをデータにバインドする
  2. 基になるデータを変更するには、チェックボックス IsChecked を変更します。
  3. チェックボックスは基礎となるデータの変更を検出し、それ自体を更新しますか?
役に立ちましたか?

解決

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

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

    }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top