WPF 命令绑定中的错误(?)
Bug(?) in WPF Command Binding
我正在使用 WPF (.NET 4.5) 和 VB.NET 以及 MVVM Light。我的 Toolbar
中的 Button
绑定到底层 VM 的 RelayCommand
。 Button
在 XAML 中看起来像这样:
<Button Command="{Binding Path=BringLayerForwardCommand}" CommandParameter="{Binding SelectedLayer}">
底层命令在 ViewModel 中是这样声明的:
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)))
Button 在运行时的行为如下:
- 它永远不会启用。
CanExecute
部分的断点(上面 RelayCommand 构造函数的第二个参数)永远不会被击中。
- 如果我从匿名函数中删除 lambda 部分,断点开始被击中并且
Button
被启用。
去掉 lambda 部分后,上面的命令如下所示:
Public Property BringLayerForwardCommand As New RelayCommand(Of Layer) _
(Sub(p) BringLayerForward_Executed(p), _
Function(p) p IsNot Nothing AndAlso _
Me.Layers IsNot Nothing)
这是一个错误还是我真的遗漏了一些明显的东西?
编辑
进一步调查表明,如果我将整个匿名函数移至常规函数,一切都会开始正常工作。真的好像是个bug。
我想你可能需要一些关于这个问题的关闭 ;)。
我怀疑是 "Issue 7721: Closures not working with RelayCommand" 请参阅:http://www.mvvmlight.net/installing/changes。
此错误已在 5.4.1 中修复。
我正在使用 WPF (.NET 4.5) 和 VB.NET 以及 MVVM Light。我的 Toolbar
中的 Button
绑定到底层 VM 的 RelayCommand
。 Button
在 XAML 中看起来像这样:
<Button Command="{Binding Path=BringLayerForwardCommand}" CommandParameter="{Binding SelectedLayer}">
底层命令在 ViewModel 中是这样声明的:
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)))
Button 在运行时的行为如下:
- 它永远不会启用。
CanExecute
部分的断点(上面 RelayCommand 构造函数的第二个参数)永远不会被击中。- 如果我从匿名函数中删除 lambda 部分,断点开始被击中并且
Button
被启用。
去掉 lambda 部分后,上面的命令如下所示:
Public Property BringLayerForwardCommand As New RelayCommand(Of Layer) _
(Sub(p) BringLayerForward_Executed(p), _
Function(p) p IsNot Nothing AndAlso _
Me.Layers IsNot Nothing)
这是一个错误还是我真的遗漏了一些明显的东西?
编辑
进一步调查表明,如果我将整个匿名函数移至常规函数,一切都会开始正常工作。真的好像是个bug。
我想你可能需要一些关于这个问题的关闭 ;)。
我怀疑是 "Issue 7721: Closures not working with RelayCommand" 请参阅:http://www.mvvmlight.net/installing/changes。
此错误已在 5.4.1 中修复。