4

WPF コントロールについて考えると、チェック ボックスの値が変更 (トグル) されたかどうかはどうすればわかりますか?

Checked、 、 共通のUncheckedイベントがあることは知っていClickedますが、どのように変更されたかに関係なく、値が変更されたときのイベントはどうですか?

イベントに目を通しましたが、何も見つかりませんでしたが、明らかなことを見逃している可能性があります (過去に何度も発生しているため)。

4

4 に答える 4

7

IsChecked依存関係プロパティをブール値にバインドするだけです。そのバインドされたプロパティ セッターで、必要なものを操作できます (それが true または false に設定されているかどうかに関係なく)。それは期待どおりに機能します。

あなたの見解では:

  <Grid>
    <CheckBox ... IsChecked="{Binding ShowPending}"/>
  </Grid>

DataContext ViewModel または CodeBehind で。

  private bool showPending = false;

  public bool ShowPending
  {
      get { return this.showPending; }
      set 
      { 
         //Here you mimic your Toggled event calling what you want!
         this.showPending = value; 
      }
  }
于 2012-09-13T18:53:56.470 に答える
6

これにはすでに受け入れられている答えがあることは知っていますが、これに対するバインディングは少しやり過ぎです。

1 つのイベント ハンドラーを作成し、それを Checked イベントと Unchecked イベントの両方に接続してから、イベント ハンドラー内の IsChecked プロパティをチェックするだけです。

于 2013-05-23T04:56:52.620 に答える
1

ランドルフの答えから外れて、ウィンドウを表すクラスを作成するだけです。新しいクラスで、BlahIsChecked というプロパティを作成します。INotifyPropertChangedEvent をクラスに実装し、新しいプロパティのセッターで、プロパティ名でイベントを発生させます。

class Blah : INotifyPropertyChanged
{
    // Used for triggering the event
    public event PropertyChangedEventHandler PropertyChanged;

    // Called when the property changes
    protected void OnPropertyChanged(String propertyName)
    {
        // Retrieve handler
        PropertyChangedEventHandler handler = this.PropertyChanged;
        // Check to make sure handler is not null
        if(handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    private bool _blahIsChecked;
    public bool BlahIsChecked
    {
        get {
            return _blahIsChecked;
        }
        set {
            _blahIsChecked = value;
            OnPropertyChanged("BlahIsChecked);
        }
    }
}

次に、wpf クラスに移動して、 this.DataContext = new MainModel(); と言います。これは、WPF または C# で実行できます。

チェックボックスxamlで次のようにします

<checkbox Checked="{Binding BlahIsChecked, Mode=TwoWay}"/>

私は記憶からこれを行いましたが、始める必要があります。幸運を。

于 2012-09-13T19:12:24.460 に答える
1

あなたの最良の選択肢は、おそらくIsCheckedプロパティです。ただし、イベントが必要な場合はDependencyPropertyDescriptor、メソッドを作成してハンドラーを登録することを検討できますAddValueChanged

これは、チェック ボックスの値が変更されたというイベント通知にほぼ近いと思います。記述子の作成とハンドラーの追加は次のようになります。

var dpd = DependencyPropertyDescriptor.FromProperty(CheckBox.IsChecked, typeof(CheckBox));
dpd.AddValueChanged(...);
于 2012-09-13T19:22:53.400 に答える