En MvvmCross, ¿cómo hago las propiedades de enlace personalizado?

Estoy usando MvxBindableListView para vincular una List de objetos de datos a un ListView . El diseño que estoy usando para las filas tiene varios TextView s. Estoy vinculando con éxito la propiedad Text para cada uno de estos a una propiedad en mi objeto de datos, pero he descubierto que no puedo vincularme a TextColor ya que esa propiedad no existe en Mono For Android TextView s; en cambio, tienes que utilizar el método SetTextColor() . Entonces, ¿cómo puedo vincular una propiedad de objeto de datos a un método? A continuación está el código que traté de usar:

   

Hay un ejemplo de agregar un enlace bidireccional personalizado para “IsFavorite” en el ejemplo de la conferencia – ver:

Este ejemplo se explica un poco más en: Enlaces MVVMCross en Android

Para una unión personalizada de “origen a destino” de una vía, el código debería ser un poco más simple, solo necesita manejar SetValue , y no es necesario invocar FireValueChanged en ningún código de manejo de eventos.


Para textColor, me imagino que el enlace se parecería un poco a:

 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; } } } 

y se configuraría con:

  protected override void FillTargetFactories(MvvmCross.Binding.Interfaces.Bindings.Target.Construction.IMvxTargetBindingFactoryRegistry registry) { base.FillTargetFactories(registry); registry.RegisterFactory(new MvxCustomBindingFactory("TextColor", (textView) => new MyCustomBinding(textView))); } 

Nota: No he comstackdo este código de ejemplo; cuando lo ponga en funcionamiento, regrese y corrija este pseudo-código 🙂