繁体   English   中英

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

[英]Xamarin.IOS : MVVMCross Passing parameter from view to ViewModel

我正在为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连接视图和视图模型,但是在clickm按钮上出现以下错误:

提供给CFRunLoopRunSpecific的无效模式'kCFRunLoopCommonModes'-在_CFRunLoopError_RunCalledWithInvalidMode上中断以进行调试。 每次执行该消息只会出现一次。

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

字符串名称的方法:

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的创建。

请查看MvvmCross官方文档以及如何使用UITableViews和UITableViewCells。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM