Meilleur auteur de réponses
Binding sur GridView.ItemsSource, pourquoi ça marche ?

Question
-
Bonjour,
J'ai un petit exemple de binding d'une liste dans un GridView.
Je voudrai savoir pourquoi le binding des items fonctionne ?
En particulier le <Button Content="{Binding}" >
Pourquoi le binding du "Button" correspond à chaque éléments et pas à la liste List<char> ?
Quel est le mécanisme qui fait que je retrouve mes 4 caractères à l'affichage.
Voici mon code, c'est plutôt simple.
En premier lieu j'ai mes données dans une liste de caractères
namespace caractere.Model { class Donnees { private List<char> lstSymbol = null; public List<char> LstSymbol { get { if (lstSymbol == null) { lstSymbol = new List<char>(); lstSymbol.Add('A'); lstSymbol.Add('B'); lstSymbol.Add('C'); lstSymbol.Add('D'); } return lstSymbol; } } } }
Puis le XAML avec le binding de la liste.
<Page x:Class="caractere.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:caractere" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" xmlns:model="using:caractere.Model"> <Page.Resources> <model:Donnees x:Key="JeuDeDonnees"></model:Donnees> </Page.Resources> <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}" DataContext="{StaticResource JeuDeDonnees}"> <GridView ItemsSource="{Binding LstSymbol}" Margin="20"> <GridView.ItemTemplate> <DataTemplate> <Button Content="{Binding}" FontFamily="Segoe UI Symbol" FontSize="40" Width="80" Height="80"/> </DataTemplate> </GridView.ItemTemplate> </GridView> </Grid> </Page>
ce qui donne l'affichage suivant
Merci.
- Modifié Pedalo Production mercredi 24 avril 2013 20:52
mercredi 24 avril 2013 20:50
Réponses
-
Bonjour,
Lorsque vous settez une collection à une itemSource, l'itemsControl (ici la gridview) fait ceci :
- Génére un élément visuel (un itemContainer, par exemple un GridViewItem) par élément dans votre liste de données.
- Dans ce container, un ContentPresenter utilise votre donnée comme DataContext/Content et c'est ici que la magie se produit !
- Ensuite il dispose les éléments en utilisant son ItemsPanel mais ceci est une autre histoire :)
Cordialement
Jonathan ANTOINE - Découvrez mon livre sur MVVM: http://goo.gl/N6Tmn - http://www.jonathanantoine.com
- Proposé comme réponse JonathanANTOINEMVP, Moderator jeudi 25 avril 2013 08:13
- Marqué comme réponse Pedalo Production vendredi 26 avril 2013 12:28
jeudi 25 avril 2013 08:13Modérateur
Toutes les réponses
-
Bonjour,
Lorsque vous settez une collection à une itemSource, l'itemsControl (ici la gridview) fait ceci :
- Génére un élément visuel (un itemContainer, par exemple un GridViewItem) par élément dans votre liste de données.
- Dans ce container, un ContentPresenter utilise votre donnée comme DataContext/Content et c'est ici que la magie se produit !
- Ensuite il dispose les éléments en utilisant son ItemsPanel mais ceci est une autre histoire :)
Cordialement
Jonathan ANTOINE - Découvrez mon livre sur MVVM: http://goo.gl/N6Tmn - http://www.jonathanantoine.com
- Proposé comme réponse JonathanANTOINEMVP, Moderator jeudi 25 avril 2013 08:13
- Marqué comme réponse Pedalo Production vendredi 26 avril 2013 12:28
jeudi 25 avril 2013 08:13Modérateur -
Bonjour,
Merci pour la réponse.
Donc si je comprend bien c'est chaque char de la liste qui est bindé dans le texte du bouton.
"c'est ici que la magie se produit", j'aimerai avoir plus de détail sur ce mécanisme.
Quel mot clé je peux utiliser dans mon moteur de recherche pour trouver plus d'info la dessus ?
Merci.
jeudi 25 avril 2013 19:28 -
Il n'y a pas spécialement plus de details, l'items control prend chaque élément de donnée et set le datacontext des containers qu'il génére à celui-ci.
Cet article pourrait vous intéresser : http://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.aspxJonathan ANTOINE - Découvrez mon livre sur MVVM: http://goo.gl/N6Tmn - http://www.jonathanantoine.com
- Proposé comme réponse JonathanANTOINEMVP, Moderator vendredi 26 avril 2013 07:34
vendredi 26 avril 2013 07:34Modérateur -
Bonjour
Vous pouvez commencer avec le site MSDN et suivez les liens:
http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.gridview.aspx
Cordialement,
vendredi 26 avril 2013 07:38 -
Ok. Merci pour les réponses et pour les liens.vendredi 26 avril 2013 12:28