Question

j'utilise MvxBindableListView lier un List<> d'objets de données à un ListView.La disposition que j'utilise pour les lignes comporte plusieurs TextViews.J'ai réussi à lier le Text propriété pour chacun d'eux à une propriété dans mon objet de données, mais j'ai constaté que je ne peux pas me lier à TextColor car cette propriété n'existe pas dans Mono pour Android TextViews ;à la place, vous devez utiliser le SetTextColor() méthode.Alors, comment puis-je lier une propriété d’objet de données à une méthode ?!Ci-dessous le code que j'ai essayé d'utiliser :

    <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'}
        }" />
Était-ce utile?

La solution

Il existe un exemple d'ajout d'une liaison bidirectionnelle personnalisée pour "IsFavorite" dans l'exemple de conférence - voir :

Cet exemple est expliqué un peu plus loin dans : Liaisons MVVMCross dans Android

Pour une liaison personnalisée unidirectionnelle « source-cible », le code devrait être un peu plus simple : il vous suffit de gérer le SetValue - et je n'ai pas besoin d'invoquer FireValueChanged dans tous les cas, gérer le code.


Pour textColor, j'imagine que la liaison ressemblerait un peu à :

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

et serait configuré avec :

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

Note:Je n'ai pas compilé cet exemple de code - lorsque vous le faites fonctionner, veuillez revenir et corriger ce pseudo-code :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top