各項目を表すためにこのようなクラスを使用して、コンテキストメニューを動的に設定しています:-
public class ContextMenuItem : INotifyPropertyChanged
{
public string Header {get;set;}
public bool IsChecked {get;set;}
public ICommand Command {get;set;}
..etc..
}
プロパティが標準の INotifyPropertyChanged を実装していることに注意してください。これは、スペースを節約するためにここでは省略しています。
XAML は含めません。上記のプロパティはMenuItem
対応するプロパティにバインドされているだけです。
これが私の問題です。IsChecked
メニュー項目の状態で、別のモデルのブール値プロパティの値を「追跡」したいと考えています。例えば:-
var menuItem = new ContextMenuItem
{
Caption = "Online?",
IsChecked = user.IsOnline
};
これは明らかに適切に機能しません。メニュー項目のチェック済みの状態は最初はユーザーのオンライン状態を反映しますが、変更してもチェック済みの状態は変わりませんuser.IsOnline
。
1 つのアプローチは、user
オブジェクトの PropertyChanged イベントをサブスクライブし、変更さIsChecked
れるたびにIsOnline
変更することですが、これは少し複雑に感じます。よりエレガントなソリューションはありますか?