Pregunta

Estoy usando MVVMCross para Databind My ViewModel a un diseño de vista Android.

del ejemplo de SimpleBinding Puedo ver que para unir un valor a una propiedad, hago esto:

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

El texto está unido a la propiedad subtotal de ViewModel.Pero, ¿cómo voy a más de una propiedad?En mi caso, quiero unir una propiedad ViewModel llamada SuppassLower al atributo TextColor del elemento de diseño.No puedo agregar otro MVXBind y no puedo configurar MVXBind a una matriz.

¿Fue útil?

Solución

El formato del JSON utilizado en la expresión de enlace es un diccionario de llamado mvxjsonbindingdescription s

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

Esto se usa con:

  • El nombre de la clave del diccionario es la propiedad de destino (vista) para la encuadernación.
  • La propiedad de generación de vinculación de la propiedad (DataContext) es la propiedad de la fuente (DataContext) para el enlace: si no se especifica Path, entonces toda la propia DataContext es la fuente de unión.

Para la actividad / Vista a nivel AXML El DataContext es el ViewModel, pero para AXML de Sub-View, el DataContext normalmente será un objeto secundario del ViewModel - E.G. Dentro de un ListView, el DataContext podría ser un elemento dentro de una lista o la selección de observabilidad propiedad de ViewModel.


Para especificar enlaces múltiples, puede usar JSON como:

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

Para su ejemplo particular, esto podría ser:

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

Donde su visualdel es algo así como:

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

     public bool HigherLower { get; set; }

     // more code here
}

y su convertidor es algo así 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);
    }
}

y donde ese convertidor se inicializa durante la instalación - por ejemplo. Vea cómo las propiedades de la Los convertidores clase se utilizan en TwitterSearch


Una muestra que muestra múltiples enlaces en el trabajo es los mejores ventas: consulte el clic y el texto encuadernado en el elemento de la lista https://github.com/slodge/mvvmcross/blob/master/sample%20-%20bestsellers/bestsellers/bestsellers.droid/ Recursos / Diseño / LISTITEM_CATEGORY.AXML

Otros consejos

Ruta ':' MayorLOWERYOU debe hacer esto:

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

NOTA EL:

bind="{ 'Text':{xx}, 'Other':{yy} }"

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top