Xamarin.IOS:MVVMCross传递参数从视图到ViewModel

时间:2016-12-28 15:27:34

标签: c# xamarin xamarin.ios mvvmcross

我在我的xamarin ios项目中使用MVVMCross。从我的自定义单元格视图,我想将参数传递给其视图模型。是否有可能使用MVVMCross?

我尝试使用CommandParameter属性,但它不起作用。是否可以将参数从视图传递到视图模型,如果有,可以有人提供片段吗?

谢谢

更新

我的单元格有按钮,单击按钮我想知道被单击按钮的单元格索引以执行操作。我使用以下代码来做到这一点。

this.DelayBind(() =>
{
    var bSet = this.CreateBindingSet<MyeCell, SomeViewModel>();
    bSet.Bind(cellIndex).To(vm => vm.index);
    bSet.Bind(UserPostBtn).To(vm => vm.EditPhotoCommand);
    bSet.Apply();
});

我尝试使用delaybind连接视图和viewmodel但是在按钮clickm上我收到以下错误:

  

CFRunLoopRunSpecific提供的无效模式'kCFRunLoopCommonModes'    - 打破_CFRunLoopError_RunCalledWithInvalidMode进行调试。此消息仅在每次执行时出现一次。

2 个答案:

答案 0 :(得分:4)

您应该可以使用ViewModel通过命令将参数传递给MvxCommandParameterValueConverter

字符串名称方法:

bSet
    .Bind(UserPostBtn)
    .To(vm => vm.EditPhotoCommand)
    .WithConversion("CommandParameter", cellIndex);

键入名称方法:

bSet
    .Bind(UserPostBtn)
    .To(vm => vm.EditPhotoCommand)
    .WithConversion(new MvxCommandParameterValueConverter(), cellIndex);

扩展方法方法:

bSet
    .Bind(MainButton)
    .To(vm => vm.EditPhotoCommand)
    .CommandParameter(cellIndex);

然后在ViewModel中接收传递的参数。

IMvxCommand _editPhotoCommand;
public IMvxCommand EditPhotoCommand =>
    _editPhotoCommand ?? (_editPhotoCommand = new MvxCommand<int>(EditPhotoExecution));

private void EditPhotoExecution(int index)
{
    // do stuff
}

<强>更新

MvvmCross还提供了一个扩展方法CommandParameter,它允许您只传入命令参数,它将处理MvxCommandParameterValueConverter的创建。

答案 1 :(得分:1)

请查看official documentation for MvvmCross以及如何使用UITableViews和UITableViewCells。

基本上,您的MvxTableViewSource子类会收到有关选择了哪个单元格的通知。现在只需检查您的模型并匹配索引......

如果您需要知道输入了什么文本或者在单元格中翻转了切换,您应该考虑在您的单元子类和单元源之间使用绑定。确保在UITableViewCell子类中使用DelayBind