コマンドを利用してWPFアプリケーションを作成しようとしていますが、メニューボタンを有効にするコマンドに問題があります。簡単な検証を行っています。この場合、ユーザーが新しいドキュメントを作成するか、既存のドキュメントを読み込むまで、[保存]ボタンは無効になっています。
私のビューモデルが次のようになっているとしましょう。オブジェクトViewModelはINotifyPropertyChangedを継承します。
public ViewModel()
{
New = new RelayCommand( OnNew, CanNew );
Save = new RelayCommand( OnSave, CanSave );
}
ICommand m_cmdNew;
public ICommand New
{
get { return m_cmdNew; }
set
{
m_cmdNew = value;
OnPropertyChanged( "New" );
}
}
void OnNew( object param )
{
bCanSave = true;
// I read that this could resolve my problem.
CommandManager.InvalidateRequerySuggested();
}
bool CanNew( object param )
{
return true;
}
「保存」コマンドでも同じことをしていると仮定しましょう。唯一の例外は「CanSave」は次のようになります。
bool CanSave( object param )
{
return bCanSave;
}
私のXaml:
<Menu>
<MenuItem Header="Text">
<MenuItem Header="New" Command="{Binding New}"/>
<MenuItem Header="Save" Command="{Binding Save}"/>
</MenuItem>
</Menu>
私が抱えている問題は、変数「bCanSave」を変更した後、CanSaveメソッドが呼び出されないことです。どうすればこれを達成できますか?プロパティを作成し、INotifyPropertyChangedとXAMLバインディングを使用して、IsEnabledプロパティを切り替えることができることはわかっていますが、読んだ内容から、コマンドがすでにこれを実行している場合は、多くの作業のように見えます。