Cheinz | Bonjour,
Je me trouve devant un petit soucis. Je développe actuellement un logiciel permettant de générer des menus (un produit par jour sur 4 jours, lundi, mardi, jeudi et vendredi). Dans mon interface, j'ai un affichage pour un mois, divisé en 5 semaines, ayant chacune 4 jours.
Voilà un screen:
Les données affichées proviennent d'une base de données SQL Server Compact, j'utilise Entity Framework. Voilà le code XAML d'une semaine:
Code :
- <ItemsControl HorizontalAlignment="Stretch" Margin="0,0,0,0" Width="Auto" ItemsPanel="{DynamicResource ItemsPanelMenuSemaine}" x:Name="LVWMenuSemaine1" Background="#00F4B909" ItemsSource="{Binding MenuJour, Mode=OneWay}" Cursor="Hand" MouseUp="LVWMenuSemaine1_MouseUp">
- </ItemsControl>
|
C'est donc un ItemControl tout bête auquel j'applique mon template pour afficher la date et les produits avec les Binding. Par code je récupère ce qu'il faut de la base et je modifie le DataContext de mon ItemControl pour qu'il reçoive un MenuSemaine qui contient des MenuJour.
Code du template:
Code :
- <DataTemplate DataType="{x:MenuJourNormal}" x:Name="DTTMenuJourNormal">
- <Grid Margin="0,0,2,0">
- <Border BorderThickness="2,2,2,2" BorderBrush="#FFDDDDDD" CornerRadius="0,0,0,0" Margin="4,4,2,4">
- <StackPanel Orientation="Vertical" Width="Auto" Height="Auto" Background="#FFFAFAFA">
- <DockPanel Width="Auto" Height="Auto" Background="#FFDDDDDD">
- <Label MinWidth="50" x:Name="LBLJourSemaine" Width="Auto" Height="Auto" Content="{Binding jour.DayOfWeek, Mode=Default}" HorizontalAlignment="Stretch" Padding="5,0,5,2"/>
- <Label MinWidth="50" x:Name="LBLNumeroJourSemaine" Width="Auto" Height="Auto" Content="{Binding jour.Day, Mode=Default}" HorizontalContentAlignment="Right" DockPanel.Dock="Right" Foreground="#FFFF0000" Padding="5,0,5,2"/>
- </DockPanel>
- <StackPanel Width="Auto" Height="Auto" Orientation="Vertical" HorizontalAlignment="Center">
- <Label Content="Elementaire" Height="Auto" Padding="0,0,0,0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Foreground="#FF666666"/>
- <Label Content="{Binding ProduitsDuJour.ProduitElementaire.nom, Mode=Default}" x:Name="LBLProduitElementaire" Width="Auto" Height="Auto" Padding="0,0,0,0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
- </StackPanel>
- <StackPanel Width="Auto" Height="Auto" Orientation="Vertical" HorizontalAlignment="Center">
- <Label Content="Maternelle" Height="Auto" Padding="0,0,0,0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Foreground="#FF666666"/>
- <Label Content="{Binding ProduitsDuJour.ProduitMaternelle.nom, Mode=Default}" x:Name="LBLProduitMaternelle" Width="Auto" Height="Auto" Padding="0,0,0,0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
- </StackPanel>
- </StackPanel>
- </Border>
- </Grid>
- </DataTemplate>
|
J'utilise donc un template pour le type MenuJourNormal dans le code ci-dessus (j'en ai 3 autres, pour les jours fériés, de vacances et vide). Ces derniers héritent tous de MenuJour.
Ca c'était pour la présentation, maintenant voilà mon problème:
Lorsque je clique sur l'une des semaines, je voudrais l'afficher en "grand" (via un second ItemsControl récupérant la semaine sur laquelle on a cliqué) mais avec une particularité: pouvoir modifier le produit via une ComboBox répertoriant tout les produits disponibles dans la base de données. Et que celui-ci soit ensuite modifié dans la semaine correspondante en base.
Mon soucis et que je n'arrive pas a accéder au DataTemplate par code, et il semblerait, d'après ce que j'ai lu, qu'un DataTemplate n'est pas modifiable... J'aimerais rester au maximum côté XAML et ne pas devoir me taper ça en C#, ça limiterait l'intérêt de Blend et du WPF...
J'ai pensé a plusieurs solutions mais je n'en ai pas trouvé qui me convienne, si je mets ma seconde liste avec un ItemTemplate différent, il s'applique a tout les MenuJour hors je ne veux modifier que les MenuJourNormal...
De plus je ne sais pas comment faire pour faire un Binding vers mes entités a l'intérieur d'un DataTemplate et sans aucune ligne de code derrière (ne sachant pas accéder a cette dernière en C# et ne sachant pas si celle-ci est modifiable).
Dernière précision, le MenuSemaine que je bind sur ma liste et qui affiche les MenuJour contenus a l'intérieur ne contient évidemment pas la liste de tout les produits de la base...
Voilà, j'ai essayé d'être le plus clair possible mais bon, ce n'est pas évident donc si il y a des questions...
Merci d'avance. |