per passare un parametri di comando dinamici al comando nel modello di visualizzazione è possibile creare una nuova classe per esempio simili DynamicCommandParameterValueConverter
:
/// <summary>
/// This class is inspired by MvvmCross MvxCommandParameterValueConverter,
/// but because we need dynamic command parameters, we need to implement our own combined with a CustomMvxWrappingCommand.
/// </summary>
/// <typeparam name="T">The type of the 'selected item' for the command</typeparam>
/// <typeparam name="TResult">The returned result that is used as input for the command.</typeparam>
public class DynamicCommandParameterValueConverter<T, TResult> : MvxValueConverter<ICommand, ICommand>
{
private readonly Func<T, TResult> commandParameterExpression;
public DynamicCommandParameterValueConverter(Func<T, TResult> commandParameterExpression)
{
this.commandParameterExpression = commandParameterExpression;
}
protected override ICommand Convert(ICommand value, Type targetType, object parameter, CultureInfo culture)
{
return new CustomMvxWrappingCommand<T, TResult>(value, commandParameterExpression);
}
}
Il CustomMvxWrappingCommand
prende un Func
come argomento, e viene successivamente richiamato e passato attraverso i comandi CanExecute/Execute
metodo. Ecco un frammento di come parte di quella classe potrebbe apparire come:
public void Execute(object parameter)
{
if (wrapped == null)
{
return;
}
if (parameter != null)
{
Mvx.Warning("Non-null parameter overridden in MvxWrappingCommand");
}
wrapped.Execute(commandParameterOverride((T)parameter));
}
Si potrebbe modificare la classe MvxWrappingCommand
da MVX per implementare l'esempio precedente.
L'uso di tutto:
set.Bind(myControl).For(control => control.ItemClick).To(vm => vm.MyCommand).WithConversion(
new DynamicCommandParameterValueConverter<MyModel, string>((MyModel item) =>
{
// Do custom logic before parsing the item..
}));
C'è un nuovo aggiornamento per questa risposta? Mi piacerebbe avere un parametro di comando dinamico in iOS per il mio UIButton. Ad esempio, quando fai clic sul pulsante, chiamerà il mio comando con il testo corrente in uno dei miei controlli UITextField ... e tutti collegati con .Bind. – Michael