Comment puis-je lier plusieurs propriétés dans un élément de mise en page Android

StackOverflow https://stackoverflow.com//questions/10688603

  •  12-12-2019
  •  | 
  •  

Question

J'utilise MVVMCross à Databind My ViewModel à une mise en page d'une vue Android.

de l'exemple SimpleBinding, je peux voir que pour lier une valeur à une propriété que je fais ceci:

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

Donc, le texte est lié à la propriété sous-totale de la vue de la vue.Mais comment puis-je lier plus d'une propriété?Dans mon cas, je veux lier une propriété ViewModel appelée HideLowower à l'attribut TextColor de l'élément de mise en page.Je ne peux pas ajouter un autre mvxbind et je ne peux pas régler MVXBind à un tableau.

Était-ce utile?

La solution

Le format du JSON utilisé dans l'expression de liaison est un dictionnaire de nommé 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; }
}

Ceci est utilisé avec:

  • Le nom de la clé de dictionnaire étant la propriété cible (vue) pour la liaison.
  • La propriété Genering Path étant la propriété Source (DataContext) pour la liaison - Si Path n'est pas spécifié, l'ensemble du DataContext lui-même est la source de liaison.

Pour l'activité / le niveau d'affichage AXML, le DataContext est le point de vue de la vue - mais pour Sous-View AXML, le DataContext sera normalement un objet enfant de la viewModel - E. G. Dans une liste de réalisations, le DataContext peut être un élément à l'intérieur d'une liste ou d'une observablecollection appartenant à la vue.


Pour spécifier plusieurs liaisons, vous pouvez utiliser JSON comme:

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

Pour votre exemple particulier, cela pourrait être:

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

Où votre viewmodel est quelque chose comme:

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

     public bool HigherLower { get; set; }

     // more code here
}

et votre convertisseur est quelque chose comme:

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

et où ce convertisseur est initialisé lors de la configuration - par exemple. Voir comment les propriétés du Les convertisseurs classe sont utilisés dans twittersarch


Un échantillon indiquant plusieurs liaisons au travail est les best-sellers - voir clic et texte lié dans l'élément de la liste https://github.com/slodge/mvvmcross/blob/master/sample%20-%20BestSellers/bestSellers/BestSellers.droïd/ Ressources / mise en page / listitem_category.axml

Autres conseils

Chemin ':' La Had Hadloweryou doit faire ceci:

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

NOTEZ LA:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top