按钮命令CanExecute属性更改时不调用我有一个带有文本框和按钮的表单。当该文本框的值更改时,按钮命令不会调用其命令的CanExecute方法。命令参数已设置但似乎没有更改。加载窗口后,该按钮保持禁用状态。我知道绑定工作正常,因为我创建了一个接收目标绑定并在绑定更改时引发CanExecute的行为。通过这种行为,可以正常调用CanExecute。视图模型:publicclassEditViewModel:INotifyPropertyChanged{privatestring_name;publicEditViewModel(){SaveChangesCommand=newDelegateCommand(p=>SaveChanges(),p=>CanSaveChanges());}publicstringName{get{return_name;}设置{如果(值==_name)返回;_name=值;OnPropertyChanged();}}publicDelegateCommandSaveChangesCommand{get;私有集;}privatevoidSaveChanges(){}privateboolCanSaveChanges(){return!string.IsNullOrWhiteSpace(Name);}}DelegateCommand:publicinterfaceIBaseCommand:ICommand{voidOnCanExecuteChanged();}publicclassDelegateCommand:IBaseCommand{privatereadonlyAction_execute;私有只读函数_canExecute;publicDelegateCommand(Actionexecute,FunccanExecute){_execute=execute;_canExecute=可以执行;}公共事件EventHandlerCanExecuteChanged;publicboolCanExecute(objectparameter){return_canExecute(parameter);}公共无效执行(对象参数){_执行(参数);OnCanExecuteChanged();}publicvoidOnCanExecuteChanged(){varhandler=CanExecuteChanged;如果(处理程序!=null)处理程序(这个,EventArgs.Empty);}}CallCommandCanExecuteWhenBindingChange:publicclassCallCommandCanExecuteWhenBindingChange:Behavior{publicstaticreadonlyDependencyPropertyTargetProperty;私有ICommandBase_command;静态CallCommandCanExecuteWhenBindingChange(){vardependency=newDependencyRegistry();TargetProperty=dependency.Register(b=>b.Target,s=>s.OnTargetChange());}publicobjectTarget{get{returnTargetProperty.Get(this);}set{TargetProperty.Set(this,value);}}privatevoidOnTargetChange(){if(_command==null&&AssociatedObject!=null){varfield=AssociatedObject.GetType().GetProperty("Command");_command=(IBaseCommand)field.GetValue(AssociatedObject);}if(_command!=null)_command.OnCanExecuteChanged();}}谁知道按键为什么不用CanEx执行?在您的DelegateCommand实现中,CanExecuteChanged应该添加/删除CommandManager。RequerySuggested事件在CommandManager检测到可能改变命令执行能力的条件时发生。改成以上是C#学习教程:当属性改变时,按钮命令CanExecute不被调用的全部内容,如果对你有用还需要进一步了解C#学习教程,希望大家多多关注对它—publiceventEventHandlerCanExecuteChanged{添加{CommandManager.RequerySuggested+=value;}删除{CommandManager.RequerySuggested-=值;}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
