Dev*_*Dan 5 lambda mvvm relaycommand
JWS Smith在MVVM上发表的MSDN杂志文章包含一个我不完全理解的lambda表达式.这段代码中param的目的是什么?
_saveCommand = new RelayCommand(param => this.Save(),
param => this.CanSave );
Run Code Online (Sandbox Code Playgroud)
翻译成我的首选语言VB它是:
Dim saveAction as New Action(Of Object)(AddressOf Me.Save)
_saveCommand = New RelayCommand(saveAction, Function(param) Me.CanSave)
Run Code Online (Sandbox Code Playgroud)
如果在CanSave或Save中使用它,我本来期望只看到param.我对lambda表达式有些新意.在我看来,看到一个既没有声明也没用过的变量对我来说很奇怪.任何解释将不胜感激.
要把它放在上下文中,RelayCommand(C#)的构造函数是:
public RelayCommand(Action<object> execute, Predicate<object> canExecute)
Run Code Online (Sandbox Code Playgroud)
在VB中:
Public Sub New(ByVal execute As Action(Of Object), _
ByVal canExecute As Predicate(Of Object))
Run Code Online (Sandbox Code Playgroud)
lambda 表达式正在声明它——它出现的地方基本上就是一个声明。如果没有,它将不兼容Action(Of Object)。这就是它存在的原因 - 即使您实际上并不需要该值。
使用匿名方法,如果不需要任何参数值,可以完全省略参数列表:
_saveCommand = new RelayCommand(delegate { this.Save(); },
delegate { return this.CanSave; });
Run Code Online (Sandbox Code Playgroud)
...但是你不能用 lambda 表达式来做到这一点。您必须指定参数列表 - 要么只是作为单个参数的参数名称,要么是括号中的完整列表。您提供的代码相当于:
_saveCommand = new RelayCommand((Object param) => this.Save(),
(Object param) => this.CanSave);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1836 次 |
| 最近记录: |