Pergunta

estou usando MvxBindableListView para vincular um List<> de objetos de dados para um ListView.O layout que estou usando para as linhas tem vários TextViewS.Estou vinculando com sucesso o Text propriedade de cada um deles a uma propriedade em meu objeto de dados, mas descobri que não consigo vincular a TextColor já que essa propriedade não existe no Mono para Android TextViewé;em vez disso, você deve usar o SetTextColor() método.Então, como posso vincular uma propriedade de objeto de dados a um método?!Abaixo está o código que tentei 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'}
        }" />
Foi útil?

Solução

Há um exemplo de adição de uma ligação bidirecional personalizada para "IsFavorite" no exemplo de Conferência - consulte:

Este exemplo é explicado um pouco mais detalhadamente em: Ligações MVVMCross no Android

Para uma ligação personalizada unidirecional "origem ao destino", o código deve ser um pouco mais simples - você só precisa lidar com o SetValue - e não precisa invocar FireValueChanged em qualquer código de manipulação de eventos.


Para textColor, imagino que a ligação seria parecida com:

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 seria configurado com:

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

Observação:Eu não compilei este código de exemplo - quando você fazê-lo funcionar, volte e corrija este pseudocódigo :)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top