Để vượt qua một thông số lệnh động để lệnh trong mô hình xem bạn có thể tạo một lớp mới ví dụ như thế này 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);
}
}
Các CustomMvxWrappingCommand
mất một Func
như là đối số, và sau đó được gọi và chuyển vào lệnh CanExecute/Execute
phương pháp. Dưới đây là một đoạn phần của lớp đó có thể nhìn như thế nào như:
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));
}
Bạn có thể sửa đổi các lớp MvxWrappingCommand
từ Mvx để thực hiện các ví dụ trên.
Việc sử dụng lên tất cả:
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ó bất kỳ bản cập nhật mới cho câu trả lời này? Tôi muốn có một tham số lệnh động trong iOS cho UIButton của tôi. Ví dụ, khi bạn nhấp vào nút, nó sẽ gọi lệnh của tôi với Văn bản hiện tại trong một trong các điều khiển UITextField của tôi ... và tất cả được nối với .Bind. – Michael