【问题标题】:relaycommand CanExecute returns incorrect valuerelaycommand CanExecute 返回不正确的值
【发布时间】: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


【解决方案1】:

(来自评论) 创建一个 CanExecute 方法以避免使用 lambda 表达式。

正如您所建议的那样,MVVM Light Framework 的 IsAlive 属性似乎在以某种方式干扰。如果您愿意,您可以发布另一个关于此的问题。问候!

【讨论】:

    猜你喜欢
    • 2013-02-10
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    • 2018-06-21
    • 2014-12-29
    相关资源
    最近更新 更多