Pregunta

estoy usando MvxBindableListView para unir un List<> de objetos de datos a un ListView.El diseño que estoy usando para las filas tiene varios TextViews.Estoy vinculando con éxito el Text propiedad 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 para Android TextViews;en su lugar tienes que usar el SetTextColor() método.Entonces, ¿cómo puedo vincular una propiedad de objeto de datos a un método?A continuación se muestra el código que intenté usar:

    <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'}
        }" />
¿Fue útil?

Solución

Hay un ejemplo de cómo agregar un enlace bidireccional personalizado para "IsFavorite" en el ejemplo de la Conferencia; consulte:

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

Para un enlace personalizado unidireccional "fuente a destino", el código debería ser un poco más simple: solo necesita manejar el SetValue - y no es necesario invocar FireValueChanged en cualquier caso, manejo del código.


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 estaría configurado con:

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

Nota:No he compilado este código de ejemplo; cuando lo haga funcionar, regrese y corrija este pseudocódigo :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top