WPFデータバインディングでは、IsCheckedプロパティをいくつかのデータにバインドできます。ユーザー設定ですが、「CheckChanged」イベントを処理する必要があります。個別に処理できることはわかっていますChecked、Uncheckedイベントですが、この値が変更されたときに通知を受ける方法はありますか?
<CheckBox Content="Case Sensitive" IsChecked="{Binding bSearchCaseSensitive,
Source={x:Static Properties:Settings.Default}}" />
注:チェックされているかどうかは関係ありません。変更されたときに通知を受け取りたいだけです。
can確認済みイベントと未確認イベントを別々に処理しても、have toとは限りません。 MVVMパターンに従わない場合は、両方のイベントに同じハンドラーをアタッチするだけで、変更シグナルを受け取ることができます。
<CheckBox Checked="CheckBoxChanged" Unchecked="CheckBoxChanged"/>
および分離コード。
private void CheckBoxChanged(object sender, RoutedEventArgs e)
{
MessageBox.Show("Eureka, it changed!");
}
WPFは、理由のためにINotifyPropertyChangedやDependencyPropertiesを利用するMVVMパターンを強く推奨していることに注意してください。これは機能するものであり、良いプログラミング習慣として奨励したいものではありません。
コメントするには長すぎるので、これを答えに入れています:
CheckBox
が変更されたときに注意するためにVMが必要な場合は、静的な値ではなく、実際にCheckBox
をVMにバインドする必要があります。
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}"/>
チェックボックスのクリック=チェックボックスの変更として、以下も変更できます:
<CheckBox Click="CheckBox_Click" />
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
// ... do some stuff
}
IsThreeState="True"
一方、CheckedおよびUncheckedの処理は行いません。
これは古い質問ですが、MVVMを使用している場合にCommand
にバインドするのはどうですか?
例:
<CheckBox Content="Case Sensitive" Command="{Binding bSearchCaseSensitive}"/>
私にとっては、Check
とUncheck
の両方でトリガーされます。
MVVMパターンを使用してチェック済み/未チェックのイベントを処理するために見つけたシンプルで適切な方法は、Caliburn.Microを使用した次のとおりです。
<CheckBox IsChecked="{Binding IsCheckedBooleanProperty}" Content="{DynamicResource DisplayContent}" cal:Message.Attach="[Event Checked] = [Action CheckBoxClicked()]; [Event Unchecked] = [Action CheckBoxClicked()]" />
そして、ViewModelにMethod CheckBoxClicked()を実装して、必要なことを行います。
チェック済み イベントはどうですか?それを AttachedCommandBehaviors または類似のものと組み合わせ、 DelegateCommand を使用して、そのイベントが呼び出されるたびにビューモデルで起動される関数を取得します。