2012-05-22 2 views
3

Я использую MvxBindableListView для привязки List<> объектов данных к ListView. Макет, который я использую для строк, имеет несколько TextView. Я успешно привязываю свойство Text для каждого из них к свойству в моем объекте данных, но я обнаружил, что не могу привязываться к TextColor, поскольку это свойство не существует в Mono для Android. TextView s; вместо этого вы используете метод SetTextColor(). Итак, как я могу привязать свойство объекта данных к методу? Ниже приведен код, который я пытался использовать:В MvvmCross Как мне настроить свойства пользовательского связывания

<TextView 
     android:id="@+id/MyValueTextView" 
     android:layout_width="50dp" 
     android:layout_height="20dp" 
     android:layout_gravity="right" 
     android:gravity="center_vertical|right" 
     android:textSize="12sp" 
     local:MvxBind=" 
     { 
      'Text':{'Path':'MyValue','Converter':'MyValueConverter'}, 
      'TextColor':{'Path':'MyOtherValue','Converter':'MyOtherConverter'} 
     }" /> 

ответ

8

Там пример добавления пользовательского 2-полосная привязки для «IsFavorite» в образце конференции - см:

Этот пример объясняется немного дальше в: MVVMCross Bindings in Android

Для односторонней пользовательской привязки «источник к цели» код должен быть немного проще - вам нужно всего лишь обработать SetValue - и не нужно вызывать FireValueChanged в любом коде обработки событий.


Для TextColor, я предположил бы, что связывание будет выглядеть немного как:

public class MyCustomBinding 
    : MvxBaseAndroidTargetBinding 
{ 
    private readonly TextView _textView; 

    public MyCustomBinding(TextView textView) 
    { 
     _textView = textView; 
    } 

    public override void SetValue(object value) 
    { 
     var colorValue = (Color)value; 
     _textView.SetTextColor(colorValue); 
    } 

    public override Type TargetType 
    { 
     get { return typeof(Color); } 
    } 

    public override MvxBindingMode DefaultMode 
    { 
     get { return MvxBindingMode.OneWay; } 
    } 
} 

и будет установка с:

protected override void FillTargetFactories(MvvmCross.Binding.Interfaces.Bindings.Target.Construction.IMvxTargetBindingFactoryRegistry registry) 
    { 
     base.FillTargetFactories(registry); 

     registry.RegisterFactory(new MvxCustomBindingFactory<TextView>("TextColor", (textView) => new MyCustomBinding(textView))); 
    } 

Примечание: Я не компилируется это пример кода - когда вы его заработаете, вернитесь и исправьте этот псевдокод :)

+0

Если быть честным, мы просто вырезаем и вставляем код точно это так, и это просто сработало - неплохо для псевдокода! ;) –

+0

Если вы строите эти образцы внутри какой-то вещи SuperSimpleBinding, тогда было бы здорово, если бы вы могли GitHub это :) - предполагая, что GitHub теперь является глаголом :) Это было бы полезно для вашей внутренней тренировки, а также для публики mvx information :) – Stuart

+1

Не могли бы вы дать мне понять, как я должен разбираться с подобной ситуацией в Touch, и в случае, если бы я хотел иметь дело с такой привязкой не относительно некоторого свойства, а Action (например, например, Button onclick) ? Я нашел класс MvxTargetBinding для наследования, но ситуация с обработкой/привязкой событий/действий не полностью понятна для меня. Благодаря! – Agat

 Смежные вопросы

  • Нет связанных вопросов^_^