我有一个使用 XCode 创建的简单 View (它是 XIB)。它由两个 UITextView 控件和一个 UIButton 组成。我已将 UITextView 控件公开为 Outlet 并给它们命名。我的 View.designer.cs 文件中的一切看起来都很好。
我正在使用以下语法创建绑定(bind):
this.AddBindings(
new Dictionary<object, string>()
{
{lastname, "{'Text':{'Path':'LastName','Mode':'TwoWay'}}"},
{uservin, "{'Text':{'Path':'CarVIN','Mode':'TwoWay'}}"}
});
当我从姓氏 UITextView 移动到用户名 UITextView 时,我希望 View 模型中的 SETTER 被调用,但事实并非如此。当我单击按钮并检查 ViewModel 上两个文本属性的值时,它们均为 null。
有人知道我做错了什么吗?我在周二进行了一个快速演示,并且所有其他平台都运行良好,但似乎无法解决这个问题。
干杯,
/j
最佳答案
我认为问题在于您正在使用 UITextView
实例...但 mvvmcross vnext 仅附带 UITextField
元素的 2 路绑定(bind)。
要将 UITextView
2 路绑定(bind)添加到旧的 mvvmcross 版本:
添加自定义目标绑定(bind)类 - 有点像 v3 中的这个:https://github.com/slodge/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross.Binding.Touch/Target/MvxUITextViewTextTargetBinding.cs
在Setup.cs期间使用如下代码注册它:
protected override void FillTargetFactories(IMvxTargetBindingFactoryRegistry registry) { base.FillTargetFactories(registry); registry.RegisterFactory(new MvxSimplePropertyInfoTargetBindingFactory(typeof(MvxUITextViewTextTargetBinding), typeof(UITextView), "Text"); }
或者(但可能不是在您立即演示之前),您可以考虑更新到 v3 beta 版本。
顺便说一句,使用“swiss”绑定(bind)语法现在通常是执行此操作的正常方法:
this.AddBindings(
new Dictionary<object, string>()
{
{lastname, "Text LastName"},
{uservin, "Text CarVIN"}
});
... 和 TwoWay
绑定(bind)是大多数非 Windows MvvmCross 绑定(bind)的默认设置。
关于xamarin.ios - 如何使用 mvvmcross 双向绑定(bind)到 UITextView 控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15839310/