WinUI+CommunityToolkit MVVM中Button的CanExecute仅页面加载时触发问题
问题解决:WinUI中RelayCommand的CanExecute不随TextBox输入更新
你的问题核心是:RelayCommand默认只会在命令初始化时执行一次CanSendSms判断,当依赖的NrTelefonu属性变化时,没有通知命令重新校验执行条件。以下是两种直接有效的解决方法:
方法一:利用RelayCommand特性自动监听属性变化
修改RelayCommand的特性声明,添加DependsOn参数指定依赖属性,框架会自动在NrTelefonu变化时触发CanExecute的重新计算:
[RelayCommand(CanExecute = nameof(CanSendSms), DependsOn = new[] { nameof(NrTelefonu) })] private void SendSms() { // sends SMS }
这种方式最简洁,完全依托.NET Community Toolkit MVVM的特性自动处理,无需额外编写回调代码。
方法二:手动在属性变化时通知命令更新
如果需要更灵活的控制逻辑,可以重写ObservableProperty生成的属性变更回调方法,手动触发命令的状态更新:
[ObservableProperty] private string nrTelefonu; // 重写NrTelefonu的属性变更回调 protected override void OnNrTelefonuChanged(string? oldValue, string? newValue) { base.OnNrTelefonuChanged(oldValue, newValue); // 通知SendSmsCommand重新检查CanExecute状态 SendSmsCommand.NotifyCanExecuteChanged(); } [RelayCommand(CanExecute = nameof(CanSendSms))] private void SendSms() { // sends SMS }
两种方法都能实现你想要的效果:每次TextBox按键输入时,NrTelefonu同步更新,按钮的启用状态随之自动校验。
内容的提问来源于stack exchange,提问作者Revcio
相关产品推荐
相关产品推荐

