1

簡単なチェックボックスがあります

<CheckBox IsChecked="{Binding ForceInheritance}"/>

コードでは、「INotifyPropertyChanged」とプロパティを持つクラスがあります

public bool ForceInheritance
{
  get { return forceInheritance; }

  set
  {
    if (forceInheritance != value)
    {
      value = SomeTest();

      if (forceInheritance != value)
      {
        //something is done here.
      }

      OnPropertyChanged("ForceInheritance");
    }
  }
}

SomeTest()が!valueを返すため、基になるデータを変更する必要がない場合でも、CheckBoxはIsChecked状態を変更します。

例:
ForceInheritanceはfalseです。
チェックボックスをクリックします。
SomeTest()はfalseを返します。
->基になるデータは変更されません
->チェックボックスがオフのままになると思いますチェック
ボックスがチェックされます。

セッターが実際に値を変更しない場合に、チェックボックスのIsChecked状態を変更しないようにするにはどうすればよいですか?

「OnPropertyChanged( "ForceInheritance");」と思いました トリックを行うだろうが、そうではなかった。

お時間をいただきありがとうございます。

4

2 に答える 2

2

この問題は、チェックボックスをクリックすると値が変更されるために発生します。次に、バインディングによってプロパティ セットが発生します。その値で操作し、OnPropertyChanged を呼び出すとバック​​ バインディング アクションがチェックボックスの値を更新することを期待します。ただし、プロパティの更新後にコントロールを更新すると、無限の更新ループが発生する可能性があるため、機能しません。これを防ぐために、PropertyChanged は無視されます。

できることは、プロパティ セッターの一部のロジックをバインディング検証ルールに移動することです。詳細情報や例が必要な場合は、検証ルールについて ここで読むか、コメントを残すことができます。

それが役に立てば幸い。

于 2009-12-09T13:11:51.110 に答える