You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 05:59:51