WPF命令绑定中的错误(?)

时间:2015-08-27 15:21:44

标签: wpf vb.net mvvm lambda commandbinding

我使用WPF(.NET 4.5)和VB.NET与MVVM Light。我的Button中的Toolbar绑定到底层VM的RelayCommand。 {1}在XAML中看起来像这样:

Button

底层命令在ViewModel中声明如下:

<Button Command="{Binding Path=BringLayerForwardCommand}" CommandParameter="{Binding SelectedLayer}">

Button在运行时的行为如下:

  1. 永远不会启用。
  2. Public Property BringLayerForwardCommand As New RelayCommand(Of Layer) _ (Sub(p) BringLayerForward_Executed(p), _ Function(p) p IsNot Nothing AndAlso _ Me.Layers IsNot Nothing AndAlso (p.ZOrder < Me.Layers.Where(Function(l) l.IsFront = p.IsFront).Max(Function(l2) l2.ZOrder))) 部分的断点(上面的RelayCommand构造函数的第二个参数)永远不会被击中。
  3. 如果我从匿名函数中删除lambda部分,断点开始被点击并且CanExecute被启用。
  4. 删除lambda部分后,上面的命令如下所示:

    Button

    这是一个错误还是我真的错过了一些明显的东西?

    修改

    进一步调查表明,如果我将整个匿名函数移动到常规函数,那么一切都开始正常工作。真的好像是个bug。

1 个答案:

答案 0 :(得分:0)

我认为您可能希望在此问题上关闭;)。

我怀疑是“问题7721:闭包无法与RelayCommand一起使用”,请参见:http://www.mvvmlight.net/installing/changes

此错误已在5.4.1中修复。