Frage

Ich benutze MvxBindableListView um eine zu binden List<> von Datenobjekten zu einem ListView.Das Layout, das ich für die Zeilen verwende, hat mehrere TextViews.Ich bin erfolgreich binden die Text eigenschaft für jede dieser Eigenschaften an eine Eigenschaft in meinem Datenobjekt, aber ich habe festgestellt, dass ich nicht binden kann TextColor da diese Eigenschaft in Mono für Android nicht existiert TextViews;stattdessen haben Sie das verwendet SetTextColor() Methode.Wie kann ich also eine Datenobjekteigenschaft an eine Methode binden?!Unten ist der Code, den ich zu verwenden versucht habe:

    <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'}
        }" />
War es hilfreich?

Lösung

Es gibt ein Beispiel für das Hinzufügen einer benutzerdefinierten 2-Wege-Bindung für "IsFavorite" im Konferenzbeispiel - siehe:

Dieses Beispiel wird in etwas weiter erläutert: MvvmCross-Bindungen in Android

Für eine Einweg-benutzerdefinierte "Quelle-zu-Ziel" -Bindung sollte der Code etwas einfacher sein - Sie müssen nur mit dem umgehen SetValue - und muss nicht anrufen FireValueChanged in jedem Fall Code für die Behandlung.


Für textColor würde ich mir vorstellen, dass die Bindung ein bisschen so aussehen würde:

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

und würde mit eingerichtet werden:

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

Beachten:Ich habe diesen Beispielcode nicht kompiliert - wenn er funktioniert, kommen Sie bitte zurück und korrigieren Sie diesen Pseudocode :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top