MVVM Light - RelayCommand实例上的CanExecute方法始终在执行

时间:2010-08-09 20:54:40

标签: mvvm-light

我尝试使用最小的应用程序,只需一个文本框和一个按钮。该按钮绑定到RelayCommand实例,CanExecute方法只是随机返回true或false。文本框文本绑定了字符串属性。

令我生气的是,CanExecute方法被“始终”调用:对焦元素的更改,在文本框中按下的键,似乎所有内容都会触发对CanExecute方法的调用。 这是mvvm light工具包的“功能”吗?这是否发生在“正常”的wpf应用程序中?

是的,我知道,我想我应该更多地了解wpf中的commandind系统......; - )

感谢您的回答!

大卫

1 个答案:

答案 0 :(得分:0)

CanExecute用于确定当前状态是否允许命令执行。这通常与IsEnabled属性绑定以禁用该命令。

这也应该绑定到ViewModel上的一个属性,该属性指示当前视图状态是否允许执行。

它与托管窗口上的任何事件触发器相关联,因为任何事件都可能导致更改CanExecute状态。

此链接确认它会在托管窗口中的任何事件上被触发。

http://robburke.net/2008/04/23/wpf-command-pattern-when-does-it-query-canexecute/

为什么你认为它一直被调用是一个问题?只要你在绑定属性中没有任何强烈的逻辑,它应该没问题。