1

AutoCommit = "False"のDataFormと、コマンドSaveCommandにバインドされた外部の[保存]ボタンがあります。

データへの変更が保留されていないときに(ViewModelを使用している)保存コマンドを無効にしたい場合、いつSaveCommand.RaiseECanExecuteChanges()を実行する必要がありますか?

4

1 に答える 1

1

私は通常、RaisePropertyChanged をオーバーライドし、CanExecute 述語を ViewModel がダーティかどうかに設定します。

class ViewModel : ViewModelBase
{
    public DelegateCommand SaveCommand { get; set; }
    private bool _isDirty;

    public ViewModel()
    {
        SaveCommand = new DelegateCommand(() => OnExecuteSave(), () => CanExecuteSave());
    }

    private void CanExecuteSave()
    {
        // do your saving
    }

    private bool CanExecuteSave()
    {
        return !_isDirty;
    }

    protected override void RaisePropertyChanged(string propertyName)
    {
        base.RaisePropertyChanged(propertyName);
        _isDirty == true;
        SaveCommand.RaiseCanExecuteChanged();
    }
}

それが役立つことを願っています。

于 2012-05-25T09:10:39.367 に答える