none
Accès depuis le code-behind à un ListView intégré dans un FlipView RRS feed

  • Question

  • Bonjour,

    Dans la page xaml se trouve un FlipView Celui-ci contient dans son <DataTemplate> un ListView.

    L'affichage de celui-ci s'effectue parfaitement avec son contenu. J'ai besoin de travailler depuis le code-behind sur ce ListView mais il n'est pas reconnu. Il ne se trouve pas dans le fichier ItemDetailPage.g.i.vb

    Seulement les controls hors du FlipView sont présents. Y a-t-il un problème de <Dictionnary>? Que puis-

            <FlipView
                x:Name="flipView"             
                AutomationProperties.AutomationId="ItemsFlipView"
                AutomationProperties.Name="Item Details"
                TabIndex="1"
                Grid.Row="1"
                ItemsSource="{Binding Source={StaticResource itemsViewSource}}"  
                HorizontalAlignment="Left" Width="1346" Height="618" 
                VerticalAlignment="Top" Margin="10,10,0,0" 
                SelectionChanged="flipView_SelectionChanged">
    
                <FlipView.ItemContainerStyle>
                    <Style TargetType="FlipViewItem">
                        <Setter Property="Margin" Value="0,40,0,0"/>
                    </Style>
                </FlipView.ItemContainerStyle>
    
                <FlipView.ItemTemplate>
                    <DataTemplate>        
                        <Grid>
                            <TextBlock x:Name="Tb1" FontWeight="Light" Text="{Binding Title}" 
                                       FontSize="26.667" Margin="117,0,0,0"/>
                            <TextBlock x:Name="Tb2" FontWeight="Normal" Text="{Binding Subtitle}"/>
                            <Image x:Name="image" Height="480" Width="480" MaxHeight="480" MaxWidth="480" 
                                       Margin="-600,50,0,10" Source="{Binding Image}" Stretch="Uniform"  
                                       AutomationProperties.Name="{Binding Title}" />
                            <!-- Ce ListView affiche toutes les bouteilles de la cave pour un terroir donné. -->
                            <ListView x:Name="listView1" Margin="650,35,0,0" Height="545" Width="550"
                                      Visibility="Visible" SelectionChanged="ListView1_SelectionChanged" 
                                      SelectionMode="Single" IsItemClickEnabled="True" IsSwipeEnabled="True"
                                      VirtualizingStackPanel.VirtualizationMode="Recycling" Grid.Row="1" 
                                      ItemsSource="{Binding Source={StaticResource selectionVins}}" >
                                <ListView.ItemTemplate>
    ....

    je faire?

    Merci de ton aide

    Serge

    lundi 18 novembre 2013 10:53

Réponses

Toutes les réponses

  • Bonjour,

    C'est normal, il y a autant de ListView qu'il y aura d'items dans votre FlipView.

    Si vous avez 5 items dans le itemsViewSource, il y aura 5 instances du DataTemplate => 5 listviews (même si vous n'en voyez qu'un à l'écran)

    Que voulez-vous faire exactement ?


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mardi 19 novembre 2013 08:59
  • Bonjour,

    Le ListView doit afficher un certain nombre de bouteilles de vin. Au départ j'ai installé le listView hors du FlipView.

    Dans chaque Item j'affiche le Terroir, le Cru, Sa date d'élaboration etc.

    Hors du FlipView cela fonctionne parfaitement. Je peux modifier le contenu par exemple l'appréciation, le nom du négociant ou la date de consommation. J'ai donc besoin de lire l'Item de le modifier et de stocker le résultat dans la base SqLite.

    Le problème est que ce ListView ne glisse pas si je déplace la carte pour changer de terroir, ce qui n'est pas acceptable sur la tablette Surface Rt que je possède.

    Une fois placée dans le FlipView le ListView glisse parfaitement mais il m'est impossible de lire un Item, donc soit de le modifier, soit de l'effacer si je le désire.

    Ma question est: que faire pour accéder depuis le code-Behind à l'élément sélectionné. L'affichage de toutes les

    bouteilles fonctionne correctement. Ci-dessous le ListView complet. Merci. Serge

                <FlipView.ItemTemplate>
                    <DataTemplate>        
                        <Grid>
                            <TextBlock x:Name="Tb1" FontWeight="Light" Text="{Binding Title}" 
                                       FontSize="26.667" Margin="117,0,0,0"/>
                            <TextBlock x:Name="Tb2" FontWeight="Normal" Text="{Binding Subtitle}"/>
                            <Image x:Name="image" Height="480" Width="480" MaxHeight="480" MaxWidth="480" 
                                       Margin="-600,50,0,10" Source="{Binding Image}" Stretch="Uniform"  
                                       AutomationProperties.Name="{Binding Title}" />
                            <!-- Ce ListView affiche toutes les bouteilles de la cave pour un terroir donné. -->
                            <ListView x:Name="listView1" Margin="650,35,0,0" Height="545" Width="550"
                                      Visibility="Visible" SelectionChanged="ListView1_SelectionChanged" 
                                      SelectionMode="Single" IsItemClickEnabled="True" IsSwipeEnabled="True"
                                      VirtualizingStackPanel.VirtualizationMode="Recycling" Grid.Row="1" 
                                      ItemsSource="{Binding Source={StaticResource selectionVins}}" >
                                <ListView.ItemTemplate>
                                    <DataTemplate>
                                        <Grid x:Name="GrilleDesVins" Height="100" Margin="6">
                                            <Grid.RowDefinitions>
                                                <RowDefinition Height="25" />
                                                <RowDefinition />
                                                <RowDefinition />
                                                <RowDefinition />
                                            </Grid.RowDefinitions>
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="Auto"/>
                                                <ColumnDefinition Width="*"/>
                                            </Grid.ColumnDefinitions>
                                            <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}" Width="90" Height="90" Grid.Column="0" Grid.RowSpan="4">
                                                <Image Source="../Assets/LaCaveaVins.png" Stretch="UniformToFill"/>
                                            </Border>
                                            <!-- Ligne 1 -->
                                            <Grid x:Name="gLigne1" Grid.Column="1" Grid.Row="0" Margin="10,0,0,0">
                                                <StackPanel VerticalAlignment="Top" Orientation="Horizontal">
                                                    <TextBlock x:Name="TbCru" Text="{Binding Cru, Mode=TwoWay}"  Style="{StaticResource MonHeaderTextStyle}" TextWrapping="NoWrap"/>
                                                </StackPanel>
                                            </Grid>
                                            <!-- Ligne 2 -->
                                            <Grid Grid.Column="1" Grid.Row="1" Margin="10,0,0,0">
                                                <Grid.ColumnDefinitions>
                                                    <ColumnDefinition Width="300"/>
                                                    <ColumnDefinition Width="70"/>
                                                    <ColumnDefinition Width="*"/>
                                                </Grid.ColumnDefinitions>
                                                <StackPanel Grid.Column="0" VerticalAlignment="Top" Orientation="Horizontal">
                                                    <TextBlock Text="{Binding NomDuDomaine,Mode=TwoWay}" Style="{StaticResource MonBodyTextStyle}" TextWrapping="NoWrap"/>
                                                </StackPanel>
                                                <StackPanel Grid.Column="1" VerticalAlignment="Top" Orientation="Horizontal">
                                                    <TextBlock Text="Récolte: " Style="{StaticResource MonBodyTextStyle}" TextWrapping="NoWrap"/>
                                                </StackPanel>
                                                <StackPanel Grid.Column="2" VerticalAlignment="Top" Orientation="Horizontal">
                                                    <TextBlock Text="{Binding Annee,Mode=TwoWay}" Style="{StaticResource MonHeaderTextStyle}" TextWrapping="NoWrap"/>
                                                </StackPanel>
                                            </Grid>
                                            <!-- Ligne 3 -->
                                            <Grid Grid.Column="1" Grid.Row="2" Margin="10,0,0,0">
                                                <Grid.ColumnDefinitions>
                                                    <ColumnDefinition Width="140"/>
                                                    <ColumnDefinition Width="50"/>
                                                    <ColumnDefinition Width="50"/>
                                                    <ColumnDefinition Width="60"/>
                                                    <ColumnDefinition Width="*"/>
                                                </Grid.ColumnDefinitions>
                                                <StackPanel Grid.Column="0" VerticalAlignment="Top" Orientation="Horizontal">
                                                    <TextBlock Text="Consommer en: " Style="{StaticResource MonBodyTextStyle}" TextWrapping="NoWrap"/>
                                                </StackPanel>
                                                <StackPanel Grid.Column="1" VerticalAlignment="Top" Orientation="Horizontal">
                                                    <TextBlock Text="{Binding BoireEn,Mode=TwoWay}" Style="{StaticResource MonHeaderTextStyle}" TextWrapping="NoWrap"/>
                                                </StackPanel>
                                                <StackPanel Grid.Column="2" VerticalAlignment="Top" Orientation="Horizontal">
                                                    <TextBlock Text="Qty:" Style="{StaticResource MonBodyTextStyle}" TextWrapping="NoWrap"/>
                                                </StackPanel>
                                                <StackPanel Grid.Column="3" VerticalAlignment="Top" Orientation="Horizontal">
                                                    <TextBlock Text="{Binding Quantite,Mode=TwoWay}" Style="{StaticResource MonBodyTextStyle}" TextWrapping="NoWrap"/>
                                                </StackPanel>
                                                <StackPanel Grid.Column="4" VerticalAlignment="Top" Orientation="Horizontal">
                                                    <TextBlock Text="{Binding Appreciation,Mode=TwoWay}" Style="{StaticResource MonBodyTextStyle}" TextWrapping="NoWrap"/>
                                                </StackPanel>
                                            </Grid>
                                            <!-- Ligne 4 -->
                                            <Grid Grid.Column="1" Grid.Row="3" Margin="10,0,0,0">
                                                <StackPanel Grid.Column="2" VerticalAlignment="Center" Orientation="Horizontal">
                                                    <TextBlock Text="{Binding Adresse,Mode=TwoWay}" Style="{StaticResource MonCaptionTextStyle}" TextWrapping="NoWrap"/>
                                                </StackPanel>
                                            </Grid>              
                                        </Grid>
                                    </DataTemplate>
                                </ListView.ItemTemplate>
                            </ListView>
                        </Grid>
                        
                    </DataTemplate>
                </FlipView.ItemTemplate>
            </FlipView>
    

    mardi 19 novembre 2013 15:34
  • Donc si je comprends bien, vous avez comme source une liste de terroir, et dans chaque terroir, une collection de vins ?

    Pour bien comprendre le FlipView, imaginez le comme un simple ListBox mais qui, au lieu d'afficher l'ensemble de ses items, n'affiche que le SelectedItem.

    Dans votre cas, si vous avez 3 terroirs, il y aura 3 ListView dans le FlipView mais seulement le ListView du "SelectedTerroir" qui sera affiché.

    Si vous avez un bouton Delete par exemple, si il est en dehors du FlipView, vous voulez en réalité supprimer le (SelectedItem du ListView) du (SelectedItem du FlipView).


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mardi 19 novembre 2013 15:55
  • Bonjour,

    Je souhaitais joindre deux photos présentant l'écran pour le Bordeaux Médoc(5 crus) et Rive droite(3 crus) mais j'ai essuyé un refus lors de l'envoi. Comment joindre une photo d'écran (1024x768)?   

    Si je glisse d'un terroir à l'autre l'affichage du ListView s'adapte au contenu de la cave.

    Si je consomme 2 bouteilles de Pauillac il me faut connaître le nom de l'Item sélectionné et la Qty de vin en cave pour modifier cette Qty. Donc il me faut accéder au ListView ce que je ne peux pas faire lorsque celui-ci est intégré au FlipView. Comme déjà dit si le ListView est détaché du FlipView cela fonctionne parfaitement mais le ListView ne suit pas le mouvement du terroir(l'affichage des vins lui se synchronise).

    Merci de suivre mon problème.

    Serge

    mercredi 20 novembre 2013 10:45
  • Vous pouvez joindre une capture de votre interface ?

    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mercredi 20 novembre 2013 11:20
  • Bonjour

    Vous allez trouver cet article utile:

    http://blog.jerrynixon.com/2012/09/how-to-access-named-control-inside-xaml.html

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    • Marqué comme réponse Aurel Bera jeudi 21 novembre 2013 10:19
    mercredi 20 novembre 2013 11:23
  • Bonjour,

    Effectivement ce document est vraiment très intéressant. Il répond à ma question. En utilisant le VisualTreeHelper

    je retrouve le ListView caché.

    Impossible de passer une image !

    Sincères salutations.

    Serge

    • Marqué comme réponse zeguer jeudi 21 novembre 2013 09:28
    jeudi 21 novembre 2013 09:27