2013-01-09 2 views
0

J'ai une vue principale avec un MvxBindableListView. Le modèle d'élément a un RelativeLayout comme conteneur avec TextViews, ImageView etc. à l'intérieur.Modifier la couleur d'arrière-plan ItemTemplate RelativeLayout basée sur une propriété de modèle avec MvvmCross

Je dois pouvoir changer la couleur d'arrière-plan du RelativeLayout en fonction des données liées à la liste.

Est-ce possible?

+0

C'est possible, oui. Vous aurez besoin de faire une liaison personnalisée pour cela. Si vous avez l'intention d'utiliser la couleur elle-même dans le ViewModel, vous pouvez trouver le plugin Color utile - désolé, ce n'est qu'un commentaire - un peu occupé! – Stuart

Répondre

0

Les couleurs peuvent être liés pour afficher les propriétés en utilisant assez facilement MvxColorConverters (en utilisant le plug-in Color)

Par exemple, en supposant avoir un score qui va de 1 à 10, vous pouvez colorer une vue de texte en fonction de la valeur :

public class ScoreToColorConverter : MvxBaseColorConverter 
{ 
    private static readonly MvxColor RedColor = new MvxColor(0xff, 0x00, 0x00); 
    private static readonly MvxColor GreenColor = new MvxColor(0x00, 0xff, 0x00); 

    protected override MvxColor Convert(object value, object parameter, CultureInfo culture) 
    { 
     var intValue = (int)value; 

     return (intValue > 5) ? RedColor : GreenColor; 
    } 
} 

Ce convertisseur peut ensuite être utilisé dans une vue comme:

 <TextView 
      style="?OurTextViewBodyStyle" 
      android:textColor="@color/red" 
      local:MvxBind="{'Text':{'Path':'Score'},'TextColor':{'Path':'Status','Converter':'ScoreToColor'}}" /> 

Pour définir la couleur d'arrière-plan d'une vue, vous aurez probablement nee d pour écrire une petite liaison personnalisée - qui accède à la méthode SetBackgroundColor() - car la propriété Background elle-même est en lecture seule.

Questions connexes