Как выполнить двустороннюю привязку к элементу управления UITextView с помощью 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 с фамилией к пользовательскому UITextView, я ожидаю, что SETTER в моей модели представления будет вызван, но это не так. Когда я нажимаю кнопку и проверяю значение двух текстовых свойств в моей ViewModel, они оба равны нулю.

Кто-нибудь знает, что я сделал не так? У меня есть быстрая демонстрация во вторник, и все другие платформы работают прекрасно, но, похоже, я просто не могу решить эту проблему.

Ваше здоровье,

/j


person Jamie Fraser    schedule 05.04.2013    source источник


Ответы (1)


Я думаю, проблема будет в том, что вы используете UITextView экземпляры... но mvvmcross vnext поставляется только с двусторонней привязкой для UITextField элементов.

Чтобы добавить двустороннюю привязку UITextView к более старой версии mvvmcross:

  1. Добавьте пользовательский класс привязки цели — немного похожий на этот из версии 3: 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");
    }
    

В качестве альтернативы (но, возможно, не перед вашими немедленными демонстрациями) вы можете рассмотреть возможность обновления до бета-версии v3.


Между прочим, использование синтаксиса привязки «швейцарский» теперь обычно является обычным способом сделать это:

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

... и привязка TwoWay используется по умолчанию для большинства привязок MvvmCross, отличных от Windows.

person Stuart    schedule 05.04.2013
comment
Идеальный. Еще раз спасибо, stuqrt! - person Jamie Fraser; 09.04.2013