61

WPFデータバインディングでは、IsCheckedプロパティをユーザー設定などのデータにバインドできますが、「CheckChanged」イベントを処理する必要があります.Checked、Uncheckedイベントを個別に処理できることはわかっていますこれが価値が変わる?

<CheckBox Content="Case Sensitive" IsChecked="{Binding bSearchCaseSensitive,
          Source={x:Static Properties:Settings.Default}}" />

注:チェックされているかどうかは気にしません。変更されたときに通知したいだけです。

4

6 に答える 6

110

チェックされたイベントとチェックされていないイベントを別々に処理できるからといって、そうしなければならないわけではありません。MVVM パターンに従いたくない場合は、同じハンドラーを両方のイベントにアタッチするだけで、変更シグナルが得られます。

<CheckBox Checked="CheckBoxChanged" Unchecked="CheckBoxChanged"/>

およびコード ビハインドで。

private void CheckBoxChanged(object sender, RoutedEventArgs e)
{
  MessageBox.Show("Eureka, it changed!");
}

WPF は、何らかの理由で INotifyPropertyChanged や DependencyProperties を利用する MVVM パターンを強く推奨していることに注意してください。これは機能するものであり、プログラミングの良い習慣として推奨したいものではありません。

于 2013-03-18T16:16:11.063 に答える
31

チェックボックスのクリック=チェックボックスの変更として、次も機能します。

<CheckBox Click="CheckBox_Click" />
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
    // ... do some stuff
}

IsThreeState="True"Checked と Unchecked を処理するだけでは機能しない場合に機能するという追加の利点があります。

于 2015-10-24T14:19:44.393 に答える
13

コメントするには長すぎるので、これを答えに入れます:

が変更されたときにVMが認識できるようにする必要がある場合は、静的な値ではなく、CheckBox実際にVMにバインドする必要があります。CheckBox

public class ViewModel
{
    private bool _caseSensitive;
    public bool CaseSensitive
    {
        get { return _caseSensitive; }
        set
        {
            _caseSensitive = value;
            NotifyPropertyChange(() => CaseSensitive);

            Settings.Default.bSearchCaseSensitive = value;
        }
    }
}

XAML:

<CheckBox Content="Case Sensitive" IsChecked="{Binding CaseSensitive}"/>
于 2013-03-18T15:31:43.207 に答える
0

Checkedイベントはどうですか?それをAttachedCommandBehaviorsまたは類似のものと組み合わせ、 DelegateCommandを使用して、そのイベントが呼び出されるたびにビューモデルで起動される関数を取得します。

于 2013-03-18T15:20:51.100 に答える