El MSDN magazine article by Josh Smith on MVVM contiene una expresión lambda que no entiendo completamente. ¿Cuál es el propósito de param en este código?¿Por qué es param en esta expresión lambda?
_saveCommand = new RelayCommand(param => this.Save(),
param => this.CanSave);
Traducido a mi idioma preferido VB es:
Dim saveAction as New Action(Of Object)(AddressOf Me.Save)
_saveCommand = New RelayCommand(saveAction, Function(param) Me.CanSave)
lo que habría esperado sólo para ver parámetro si se utiliza dentro de CanSave o Guardar. Soy algo nuevo para las expresiones lambda. Es extraño para mí ver una variable que ni se declara ni se usa en ningún lado hasta donde yo sé. Cualquier explicación sería apreciada.
Para poner esto en contexto, el constructor para RelayCommand (C#) es:
public RelayCommand(Action<object> execute, Predicate<object> canExecute)
y en VB:
Public Sub New(ByVal execute As Action(Of Object), _
ByVal canExecute As Predicate(Of Object))
Creo que lo entiendo ahora. Pero, ¿por qué se ejecuta execute como Action (Of Object) cuando se ignora Object? ¿Es porque RelayCommand implementa ICommand.Execute (que toma un parámetro de objeto)? Cosas confusas. ¡Extraño VB6! – DeveloperDan
@DeveloperDan: 'RelayCommand' en sí no sabe si va a ignorar el parámetro o no. Le dará * el valor relevante, da la casualidad de que estos delegados lo ignorarán. Piense que es como un controlador de eventos: no todos los controladores de eventos se molestan en usar 'sender' o' args', ¿verdad? Simplemente los ignoran alegremente, y todo está bien. Es exactamente lo mismo aquí. –
Gracias Jon. Usted ha explicado esto bien. Y veo que eres bastante prolífico. Tengo la intención de aprender mucho más de tus otras publicaciones, webcasts y podcasts. – DeveloperDan