Domanda

Sto usando MvxBindableListView per collegare un List<> di oggetti dati a un ListView.Il layout che sto usando per le righe ha diversi TextViews.Implemente vincolando la proprietà Text per ognuna di queste a una proprietà nel mio oggetto dati, ma ho scoperto che non posso legarmi a TextColor in quanto tale proprietà non esiste in Mono per TextViews Android;Invece hai usato il metodo SetTextColor().Quindi, come posso associare una proprietà di un oggetto dati a un metodo?!Di seguito è riportato il codice che ho provato ad usare:

    <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'}
        }" />
.

È stato utile?

Soluzione

C'è un esempio di aggiungere un legame personalizzato a 2 vie per "isfavorite" nel campione della conferenza - vedere:

Questo esempio è spiegato un po 'più avanti in: MVVmCross Bindings in Android

Per un legame personalizzato "Source-to-Target" a senso unico, il codice dovrebbe essere un po 'più semplice: è solo necessario gestire il SetValue - e non è necessario richiamare FireValueChanged in qualsiasi codice di gestione degli eventi. .


.

Per Textcolor, immaginerei che il rilegatura sarebbe un po 'come:

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

e sarebbe configurato 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: non ho compilato questo codice di esempio - quando lo fai funzionare, per favore torna indietro e correggere questo pseudo-code :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top