Domanda

Sto usando MvvmCross per databind mio ViewModel per Android e il layout di Visualizzazione.

Dal SimpleBinding esempio posso vedere che per associare un valore a una proprietà faccio questo:

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

un Testo che è legato alla totale Parziale proprietà del ViewModel.Ma come faccio ad associare a più di una proprietà?Nel mio caso voglio associare un ViewModel proprietà denominata HigherLower per Coloretesto attributo dell'elemento di layout.Non posso aggiungere altro MvxBind e non riesco a impostare MvxBind di un array.

È stato utile?

Soluzione

Il formato JSON utilizzato in associazione espressione è un Dizionario di nomi 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; }
}

Questo è utilizzato per:

  • il dizionario nome di Chiave di essere il bersaglio (Vista) di proprietà dell'associazione.
  • l'associazione Path proprietà di essere la fonte (DataContext) proprietà per l'associazione - se Path non è specificato quindi tutto il DataContext di per sé è l'origine dell'associazione.

Per Attività/View livello axml DataContext è il ViewModel, ma per sub-Vista axml quindi il DataContext è generalmente un bambino oggetto del ViewModel ad es.all'interno di una ListView DataContext potrebbe essere un elemento all'interno di un Elenco o di una ObservableCollection di proprietà del ViewModel.


Per specificare più associazioni è possibile utilizzare JSON come:

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

Per il tuo esempio potrebbe essere questo:

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

dove il ViewModel è qualcosa di simile a:

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

     public bool HigherLower { get; set; }

     // more code here
}

e il convertitore è qualcosa di simile a:

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 dove convertitore che viene inizializzato durante l'Installazione: ad es.vedere come le proprietà dei Convertitori classe in TwitterSearch


Un esempio che mostra di Più Associazioni al lavoro è un best seller - vedere e fare Clic su Testo associato nella voce di elenco https://github.com/slodge/MvvmCross/blob/master/Sample%20-%20BestSellers/BestSellers/BestSellers.Droid/Resources/Layout/ListItem_Category.axml

Altri suggerimenti

Path ':' AWARELOWERYOUS DEVE FARE QUESTO:

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

Nota il:

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

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