将Mvvm Light更新为版本5后,我需要做哪些更改才能使RelayCommand CanExecute()工作?

And*_*mos 7 c# wpf mvvm-light

我将Mvvm Light更新为版本5并注意到它已RelayCommand停止工作.

问题似乎CanExecute()是没有被调用来验证.它只验证一次,就像加载窗口时一样.

这可能是最近更新中的错误还是我需要在XAML中更改某些内容?

在更新之前一切正常.我正在使用WPF.

Voj*_*nal 10

看到这个MVVM Light 5问题:

WPF是唯一一个使用CommandManager在ICommands上自动引发CanExecuteChanged事件的XAML框架.我从不喜欢这种方法,因为"神奇"部分,但这是WPF的"功能",当然我必须支持它.这里没问题.

在V5中,我转移到了所有最新版本的XAML框架的可移植类库,包括WPF4.5.不幸的是,PCL中没有CommandManager,我不得不承认我没有意识到这一点.所以当然现在自动部件不再起作用了.再一次,很抱歉.

我不希望你现在到处都提出CanExecuteChanged,而不是在你的应用程序中使用CommandManager之后,这是WPF团队的意图.因此,我将尝试在WPF4.5版本的工具包中找到恢复CommandManager用法的方法.

绝对不寻找借口;)但希望解释为什么问题出现有助于理解这一点.在我找到一种方法在PCL版本中解决这个问题之前,这将是我的第一号优先事项.与此同时,正如我之前提到的,我认为回到V4.4.32.7应该可以解决这个问题.如果没有,请告诉我.

因此,临时建议的解决方案是恢复到以前的版本.我做到了它并且有效.

我同意CommandManager正在做"魔术".一旦我在CanExecute条件中有空引用异常,因此我已经获得了像Windows Solitaire中的卡一样的错误消息的无休止循环.如果我开始一个新项目,我宁愿不使用这个"魔术",但改变现有的已经部署的项目将是非常痛苦的.

  • 要在v5.0.2中使用此修复程序,请确保从GalaSoft.MvvmLight.Command更改名称空间; 到GalaSoft.MvvmLight.Command**Wpf**; (19认同)
  • 已在5.0.2版中修复. (3认同)