私は次の問題に直面しています: チェックボックスの状態を変更しようとしたときに、WPF のチェックボックスについて知る必要があります。
- チェックボックスがユーザーによってクリックされた場合 - イベントを発生させます。
- チェックボックスの IsChecked プロパティに新しい値が指定された場合 - イベントを発生させます。
- チェックボックスの IsChecked プロパティに既にある値と同じ値が指定された場合 - イベントを発生させます。
この構造は、組み込みデバイスを制御するソフトウェアで使用されます。このデバイスの状態を要求することはできません。デバイスに特定の状態に入るように指示することのみが可能です。デバイスが特定の状態にある場合、この状態に入るようにデバイスに再度指示しても害はありません。したがって、私の要求。
これまでのところ、私は次の解決策を考え出しました: CheckBox から派生する新しいクラスを作成しますが、IsChecked プロパティを次のように再定義します。
public class ExtendedCheckBox : CheckBox
{
public class IsCheckedAssignedEventArgs : RoutedEventArgs
{
public bool? prevState { get; set; }
public bool? newState { get; set; }
public IsCheckedAssignedEventArgs(bool? prevState, bool? newState)
{
this.prevState = prevState;
this.newState = newState;
}
}
public event EventHandler IsCheckedAssigned = delegate { };
public new bool? IsChecked
{
get
{
return base.IsChecked;
}
set
{
this.IsCheckedAssigned(this, new IsCheckedAssignedEventArgs(this.IsChecked, value));
base.IsChecked = value;
}
}
}
IsChecked プロパティがプログラムによって割り当てられている場合にのみ、適切に機能します。CheckBox がクリックされた場合、イベントは発生しません。
最初の質問は、これは私の問題に対する正しいアプローチですか? はいの場合、必要なすべてのケースで機能させるにはどうすればよいですか? いいえの場合、より良いアプローチは何ですか?
アイデアをお寄せいただきありがとうございます。