canexecute谁触 wpf 发_在什么情况下ICommand CanExecute可能不会更新?

Andrew Stephens

2

wpf

多年来,我一直在几个大型项目中使用Josh Smith的RelayCommand实现.但是今天我遇到了一个场景,其中我的一个命令上的CanExecute没有刷新.我不知道是什么造成了它 - 视图模型没有做任何我已经做过几十次的事情.

VM的构造函数创建了几个命令.第一个是"开始"命令: -

StartCommand = new RelayCommand(o => StartAsync(), o => true);

StartAsync()方法如下所示: -

private async void StartAsync()

{

IsRunning = true;

await Task.Run(() => SomeLongRunningProcess(); }

IsRunning = false;

}

还有一个"保存"命令: -

SaveCommand = new RelayCommand(o => Save(), o => !IsRunning);

('IsRunning'是一个bog标准属性,实现了INotifyPropertyChanged.除了用于"CanExecute"委托之外,它还绑定到视图中几个控件的IsEnabled属性以启用/禁用它们).

当我单击"开始"按钮(绑定到"StartCommand")时,"保存"按钮被正确禁用.b/g进程运行完成,然后将IsRunning设置为false,但这不会触发"保存"按钮以启用.它只有在我点击视图的某个位置时才会启用.

(其控件IsEnabled属性绑定到虚拟机IsRunning性能不能够正确地禁用,顺便说一句).

我有一些关于这个的SO文章,但没有真正解释为什么会发生这种情况.我的解决方法是将按钮的IsEnabled属性绑定到'IsRunning',但令人沮丧的是这个特定视图拒绝播放.关于可能导致这种情况的任何想法?常识说它是特定于这个视图/ VM的东西,但我很难过(我不打算在这里发布代码 - 它有太多了).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值