我在我的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进行调试。此消息仅在每次执行时出现一次。
答案 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
。