2013-04-05 3 views
2

У меня есть простой вид, который я создал с помощью XCode (это XIB). Он состоит из двух элементов управления UITextView и UIButton. Я выставил элементы управления UITextView как Outlets и дал им имена. Все выглядит хорошо в моем файле View.designer.cs.Как сделать двустороннюю привязку к элементу управления UITextView с помощью mvvmcross?

Я создаю мой привязки, используя следующий синтаксис:

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

      }); 

Когда я перехожу от LastName UITextView к uservin UITextView Я ожидаю, что сеттер в моей ViewModel, чтобы назвать, но это не так. Когда я нажимаю кнопку и проверяю значение двух свойств текста на моем ViewModel, они оба равны нулю.

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

Приветствие,

/J

ответ

3

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

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

  1. Добавить пользовательский целевой обязательный класс - немного как этот от v3: https://github.com/slodge/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross.Binding.Touch/Target/MvxUITextViewTextTargetBinding.cs

  2. зарегистрировать его во время установки .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 привязки по умолчанию для большинства привязок не-Windows MvvmCross.

+0

Perfect. Еще раз спасибо, stuqrt! –