J'ai une liste de liste avec un bouton défini à l'intérieur d'un C'est ainsi que ma listeView est définie dans xaml. p> La source de données est une base de données SQLITE que j'ai définie dans C #: p> Le bouton de détail sélectionne la ligne Il est activé et navigue sur un détail de détail construit avec les données d'en-tête de la ligne sélectionnée. Le détail contient une deuxième liste de réception, celle-ci d'une table de détail, qui est liée à la table d'en-tête par une clé étrangère. Chaque ligne de la table de détail a une propriété BOOL de Quelques échantillons de code pour refléter ce que mes tables ressemblent à: p> le comportement souhaité Pour que mon bouton de détail sur la tête de têteView est comme suit: P> 1) 2) 3) s'il vous plaît non Suggestions d'outils personnalisés Sauf absolument aucun moyen de le faire avec des outils XAMARIN par défaut. P> P> ViewCell code>. Je voudrais savoir comment je peux mettre à jour la couleur de ce bouton de manière programmatique.
complet code>. Les itemsource de la liste de Détails de l'espace deToutes sont définis de la même manière que la hearherlistview. P>
BackgroundColor = "bleu" code> Lorsque l'en-tête n'a pas de lignes de détail correspondantes, il n'y a pas d'éléments dans la liste de détails . p>
BackgroundColor = "orange" code> Lorsque l'en-tête porte au moins une ligne de détail correspondante (et donc au moins un élément de la liste de détails de DotailPage), et tout strong> les lignes '
complète code> La propriété est définie sur
false code>. p>
BackgroundColor = "vert" code> quand le Detailpage a au moins une ligne de correspondance, et
complète code> est définie sur
true code>. S'il n'y a qu'une seule ligne qui correspond à l'en-tête et à sa propriété '
complète code> est
true code>, puis le bouton de détail est toujours vert. P>
3 Réponses :
Vous pouvez utiliser des styles avec des déclencheurs dans XAML. P>
Votre viewModel pourrait avoir des getters qui renvoient une couleur / style pour la colonne à utiliser, vous pouvez ensuite lier les couleurs de la colonne à cela. p>
ou vous pouvez le faire de manière programmatique en attribuant le fond de l'en-têteColor en fonction des données telles que datagrid.columns [0] .backgroundColor = Nouveau Solidbrush ("bleu"); Code> ou quelque chose comme ça. p>
Pourriez-vous partager un extrait qui fait cela?
Vérifiez ici: Stackoverflow.com/ Questions / 14395781 / ...
Dans votre XAML, vous devez définir la liaison à l'arrière-plan de votre bouton: et dans le code derrière, définissez la valeur sur ajoutez une propriété BTNColor dans votre modèle: p> BTNColor code> dans différentes situations Dans votre
en-tête code>: p>
public class Header
{
public int HeaderId { get; set; } // The primary key of the Header table
public string Code { get; set; } // Foreign key of the Detail table
// various Header data
public Color btnColor { get; set; }
}
Cela fonctionne exactement comment je voulais cela, merci! Une note pour quiconque à partir de l'avenir, stockez la propriété BTNColor CODE> sous forme de chaîne non de couleur car SQLite n'accepte pas les colonnes de type couleur. Je n'avais pas besoin d'utiliser un convertisseur du tout, juste lier le fond de l'arrière-plan sur la propriété de cordes pour moi, mais juste au cas où voici un tutoriel que j'ai trouvé pour construire des convertisseurs à cordes à couleurs: Forums.xamarin.com/discussion/ 37751 / ...
Pourquoi voulez-vous stocker la couleur dans SQLite lorsque la couleur dépend des données trouvées dans SQLite? Ça n'a aucun sens.
IIRC, je vous ai donné une réponse similaire à une question similaire auparavant. Vous devriez encore créer une vue de vie à l'intérieur de votre viewModel. Puis dans votre visionnel principal, pour chaque élément d'en-tête, créez une instance HearViewModel, mettez-les dans une observation d'observation, et de les lier comme l'itemsSource de La listeView: p> puis dans votre exemple XAML ci-dessus, modifiez les deux balises telles que ceci: p>