0

コマンドを利用して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プロパティを切り替えることができることはわかっていますが、読んだ内容から、コマンドがすでにこれを実行している場合は、多くの作業のように見えます。

4

1 に答える 1

0

CanExecuteChanged再評価したいコマンドでイベントを発生させる必要があります。この場合、その恐ろしいハンガリーのブール値が変化したときに実行する必要があります。

(コマンドフィールドreadonlyとプロパティgetのみを作成することをお勧めします。コマンドは通常変更されません)

于 2012-07-11T20:13:47.873 に答える