VB.NET的lambda语法和Address之间的差异
我最近进入了VB.NET的快乐世界,但就我的一生而言,我似乎不明白为什么下面的内容不起作用 当我在这里写这段代码时,一切都很好:VB.NET的lambda语法和Address之间的差异,vb.net,lambda,Vb.net,Lambda,我最近进入了VB.NET的快乐世界,但就我的一生而言,我似乎不明白为什么下面的内容不起作用 当我在这里写这段代码时,一切都很好: MyNavigationCommand = New RelayCommand(AddressOf Navigate) Private Sub Navigate() Navigator.NavigateTo(NavigationRoutes.DetailScreen) End Sub 但是,当我尝试使用lambda语法执行完全相同的操作时,当我单击触发命令的
MyNavigationCommand = New RelayCommand(AddressOf Navigate)
Private Sub Navigate()
Navigator.NavigateTo(NavigationRoutes.DetailScreen)
End Sub
但是,当我尝试使用lambda语法执行完全相同的操作时,当我单击触发命令的按钮时,lambda中的代码没有被命中
以下行无效:
MyNavigationCommand = New RelayCommand(Sub() Navigator.NavigateTo(NavigationRoutes.DetailScreen))
这应该和我以前的方法完全一样,不是吗?还是我遗漏了什么 我不确定你到底出了什么问题。这是我为测试这一点而编写的代码:
Sub Main
Dim MyNavigationCommand = New RelayCommand(AddressOf Navigate)
Dim MyNavigationCommand2 = New RelayCommand(Sub() Console.WriteLine("!"))
Navigate
MyNavigationCommand
MyNavigationCommand2
End Sub
Public Delegate Sub RelayCommand
Public Sub Navigate()
Console.WriteLine("!")
End Sub
当运行此代码时,将生成三行
代码>是Navigator.Navigate指向共享子节点还是依赖于某些属性?NavigateTo实际上是做什么的?就像你说的,它在做这么简单的事情时起作用。但是,当您将闭包传递给RelayCommand的操作时,它将不再工作。我已经解决了这个问题,它与MVVM Light的RelayCommand如何处理传递给命令的lambda中捕获的变量有关。我自己实现ICommand并传递一个捕获的变量就可以做到这一点。太奇怪了。@Mirage-你能解释一下你在哪里结束了吗?我看不出Sub()Console.WriteLine(!”
和Sub()Navigator.NavigateTo(NavigationRoutes.DetailScreen)
之间有什么区别。除非NavigationRoutes.DetailScreen
不仅仅是常规类型?