Um einen dynamischen Befehlsparameter auf den Befehl in der View-Modell übergeben Sie eine neue Klasse erstellen können z.B dies wie 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);
}
}
Die CustomMvxWrappingCommand
nimmt einen Func
als Argument und später aufgerufen wird, und in die Befehle CanExecute/Execute
Methode übergeben. Hier ist ein Ausschnitt aus wie ein Teil dieser Klasse aussehen könnte:
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));
}
Sie konnten die MvxWrappingCommand
Klasse von MVX ändern das obige Beispiel zu implementieren.
Die Verwendung von allem:
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..
}));
Gibt es eine neue Aktualisierung dieser Antwort? Ich hätte gerne einen dynamischen Befehlsparameter in iOS für meine UIButton. Wenn Sie zum Beispiel auf die Schaltfläche klicken, würde es meinen Befehl mit dem aktuellen Text in einem meiner UITextField-Steuerelemente aufrufen ... und alle mit .Bind verbunden. – Michael