如何使用mvvmcross对UITextView控件进行双向绑定?

时间:2013-04-05 16:50:11

标签: xamarin.ios mvvmcross

我有一个使用XCode创建的简单视图(它是一个XIB)。它由两个UITextView控件和一个UIButton组成。我已将UITextView控件公开为Outlets,并为它们命名。我的View.designer.cs文件中的所有内容都很好。

我正在使用以下语法创建绑定:

        this.AddBindings(
            new Dictionary<object, string>()
            {
                {lastname, "{'Text':{'Path':'LastName','Mode':'TwoWay'}}"},
                {uservin, "{'Text':{'Path':'CarVIN','Mode':'TwoWay'}}"}

            });

当我从姓氏UITextView移动到uservin UITextView时,我希望我的viewmodel中的SETTER被调用,但事实并非如此。当我单击按钮并检查ViewModel上两个文本属性的值时,它们都是null。

有人知道我做错了什么吗?我周二有一个快速的演示版本,所有其他平台都运行得很漂亮,但似乎无法解决这个问题。

干杯,

/ J

1 个答案:

答案 0 :(得分:3)

我认为问题在于你正在使用UITextView个实例......但mvvmcross vnext只附带UITextField个元素的双向绑定。

UITextView双向绑定添加到较旧的mvvmcross版本:

  1. 添加自定义目标绑定类 - 有点像v3中的那个:https://github.com/slodge/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross.Binding.Touch/Target/MvxUITextViewTextTargetBinding.cs

  2. 在Setup.cs期间注册它,代码如下:

    protected override void FillTargetFactories(IMvxTargetBindingFactoryRegistry registry)
    {
        base.FillTargetFactories(registry);
    
        registry.RegisterFactory(new MvxSimplePropertyInfoTargetBindingFactory(typeof(MvxUITextViewTextTargetBinding), typeof(UITextView), "Text");
    }
    

  3. 或者(但可能不是在您的直接演示之前),您可以考虑更新到v3 beta版本。


    顺便说一下,使用'瑞士'绑定语法现在通常是正常的方法:

        this.AddBindings(
            new Dictionary<object, string>()
            {
                {lastname, "Text LastName"},
                {uservin, "Text CarVIN"}
            });
    

    ... TwoWay绑定是大多数非Windows MvvmCross绑定的默认设置。