WinUI MVVM中RelayCommand的CanExecute方法未触发问题求助
解决WinUI MVVM中RelayCommand CanExecute不更新按钮状态的问题
问题核心在于:当你修改IsCreateNewEnabled属性值时,RelayCommand并没有收到“需要重新检查CanExecute状态”的通知,所以按钮的启用/禁用状态不会自动更新。
解决方法很简单,在IsCreateNewEnabled的属性setter中,属性值变更后调用命令的NotifyCanExecuteChanged()方法,强制命令重新评估CanExecute逻辑:
修改你的IsCreateNewEnabled属性代码:
private bool _isCreateNewEnabled = false; public bool IsCreateNewEnabled { get => _isCreateNewEnabled; set { // 只有当属性值真正变化时,才触发命令状态更新 if (SetProperty(ref _isCreateNewEnabled, value)) { CreateNewCommand.NotifyCanExecuteChanged(); } } }
这样一来,当你在处理方法中设置IsCreateNewEnabled = false时,setter会触发CreateNewCommand的状态更新,系统会重新调用CanExecuteCreateNew()方法,按钮的启用状态也会同步更新为禁用。
注意:WinUI MVVM工具包自带的RelayCommand默认支持NotifyCanExecuteChanged()方法,如果是你自定义的RelayCommand实现,需要确保它正确实现了ICommand接口的CanExecuteChanged事件触发逻辑。
内容的提问来源于stack exchange,提问作者CarlGanz
相关产品推荐
相关产品推荐

