Pergunta

Eu estou usando MvvmCross para databind meu ViewModel para Android modo de Exibição de layout.

A partir do SimpleBinding exemplo, eu posso ver que para associar um valor a uma propriedade de eu fazer isso:

  <EditText
    android:hint="Subtotal"
    android:gravity="left"
    android:inputType="numberDecimal"
    android:maxLines="1"
    android:numeric="decimal"        
    local:MvxBind="{'Text':{'Path':'SubTotal','Converter':'Float'}}"
  />

assim, o Texto está vinculado SubTotal propriedade do ViewModel.Mas como faço para ligar para mais de uma propriedade?No meu caso quero ligar um ViewModel propriedade chamada HigherLower para o TextColor atributo do elemento de layout.Eu não posso adicionar outro MvxBind e eu não posso definir MvxBind para uma matriz.

Foi útil?

Solução

O formato JSON, usado na expressão de vinculação é um Dicionário de chamada MvxJsonBindingDescriptions

public class MvxJsonBindingDescription
{
    public string Path { get; set; }
    public string Converter { get; set; }
    public string ConverterParameter { get; set; }
    public string FallbackValue { get; set; }
    public MvxBindingMode Mode { get; set; }
}

Este é utilizado com:

  • o dicionário nome da Chave a ser o alvo (Ver) propriedade para a ligação.
  • a ligação Path propriedade de ser a fonte (DataContext) propriedade para o enlace - se Path não é especificado em seguida, todo o DataContext própria é a origem da ligação.

Para a Atividade/View nível axml o DataContext é o ViewModel - mas para sub-Ver axml, em seguida, o DataContext, normalmente, ser um objeto filho do ViewModel - e.dentro de um ListView o DataContext pode ser um item dentro de uma Lista ou de uma ObservableCollection propriedade do ViewModel.


Para especificar várias ligações, você pode usar o JSON como:

 {
      'TargetProperty1':{'Path':'SourceProperty1'},
      'TargetProperty2':{'Path':'SourceProperty2'}
 }

Seu exemplo poderia ser:

local:MvxBind="
       {
          'Text':{'Path':'SubTotal','Converter':'Float'}, 
          'TextColor':{'Path':'HigherLower','Converter':'MyColorConverter'}
       }"

onde o ViewModel é algo como:

public class MyViewModel : IMvxViewModel
{
     public float SubTotal { get; set; }

     public bool HigherLower { get; set; }

     // more code here
}

e o seu conversor é algo como:

public class MyColorConverter : MvxBaseColorConverter
{
    protected override MvxColor Convert(object value, object parameter, CultureInfo culture)
    {
        return ((bool)value) ? new MvxColor(255,0,0) : new MvxColor(0,255,0);
    }
}

e onde que converter é inicializado durante o programa de Configuração - por exemplo,veja como as propriedades do Conversores classe a são usados em TwitterSearch


Um exemplo que mostra Várias Ligações no trabalho é best-sellers - ver Clique e Texto vinculado no item da lista https://github.com/slodge/MvvmCross/blob/master/Sample%20-%20BestSellers/BestSellers/BestSellers.Droid/Resources/Layout/ListItem_Category.axml

Outras dicas

Caminho':'HigherLowerYou deve fazer isso:

local:MvxBind="{'Text':{'Path':'SubTotal','Converter':'Float'}, 'TextColor':{'Path':'HigherLower','Converter':'Color'}}"

Nota a:

bind="{ 'Text':{xx}, 'Other':{yy} }"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top