【发布时间】:2013-01-04 00:17:40
【问题描述】:
我创建了一个非常标准的 MVVM Light RelayCommand,canExecute 参数为:
() => (customer.Regions.Count > 0)
必要时我调用RaiseCanExecuteChanged(); 并且 canExecute 未正确重新评估。然后我也像这样手动调用它:var canExecute = myCommand.CanExecute(null);,它仍然是错误的。在我执行var foo = (customer.Regions.Count > 0) 之后的下一个语句中,它返回正确的结果。这是怎么回事?
命令定义:
SaveCustomerRegionsCommand = new RelayCommand(SaveCustomerRegions, () => (customer.Regions.Count > 0));
customer 是类实例化时设置的私有属性。
【问题讨论】:
-
这真的很奇怪,一切看起来都不错。您是否尝试过创建 CanExecute 方法来避免使用 lambda 表达式?我知道这是一个远射,但当你陷入困境时,一切都值得一试。
-
是的,它适用于一种方法,但我有其他命令适用于 lambdas。如果我使用自己创建的中继命令,它工作得很好,只是 MVVM Light 失败了。 _canExecute 有一个内部属性 IsAlive,它是 false。也许这就是原因?那么问题就变成了为什么它是假的..
-
你能在定义中继命令的地方分享代码吗,我的意思是方法...
-
您应该针对 MVVM Light 的 RelayCommand 的这种行为提出不同的问题。由于我的建议有效,因此我将其作为答案发布,希望您可以将其作为解决方案进行校准。问候
-
你试过 () => 真的吗?它在工作吗?如果它工作,那么用其他东西替换 lambda 表达式。
标签: wpf data-binding mvvm-light relaycommand canexecute