Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1753 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Problème WPF / Entity Framework / Data Binding

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème WPF / Entity Framework / Data Binding

n°1925666
Cheinz
Posté le 21-09-2009 à 21:23:04  profilanswer
 

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:
http://img15.imageshack.us/img15/3166/capture1vb.png
 
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 :
  1. <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">
  2. </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 :
  1. <DataTemplate DataType="{x:MenuJourNormal}" x:Name="DTTMenuJourNormal">
  2. <Grid Margin="0,0,2,0">
  3.  <Border BorderThickness="2,2,2,2" BorderBrush="#FFDDDDDD" CornerRadius="0,0,0,0" Margin="4,4,2,4">
  4.   <StackPanel Orientation="Vertical" Width="Auto" Height="Auto" Background="#FFFAFAFA">
  5.    <DockPanel Width="Auto" Height="Auto" Background="#FFDDDDDD">
  6.     <Label MinWidth="50" x:Name="LBLJourSemaine" Width="Auto" Height="Auto" Content="{Binding jour.DayOfWeek, Mode=Default}" HorizontalAlignment="Stretch" Padding="5,0,5,2"/>
  7.     <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"/>
  8.    </DockPanel>
  9.    <StackPanel Width="Auto" Height="Auto" Orientation="Vertical" HorizontalAlignment="Center">
  10.     <Label Content="Elementaire" Height="Auto" Padding="0,0,0,0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Foreground="#FF666666"/>
  11.     <Label Content="{Binding ProduitsDuJour.ProduitElementaire.nom, Mode=Default}" x:Name="LBLProduitElementaire" Width="Auto" Height="Auto" Padding="0,0,0,0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
  12.    </StackPanel>
  13.    <StackPanel Width="Auto" Height="Auto" Orientation="Vertical" HorizontalAlignment="Center">
  14.     <Label Content="Maternelle" Height="Auto" Padding="0,0,0,0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Foreground="#FF666666"/>
  15.     <Label Content="{Binding ProduitsDuJour.ProduitMaternelle.nom, Mode=Default}" x:Name="LBLProduitMaternelle" Width="Auto" Height="Auto" Padding="0,0,0,0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
  16.    </StackPanel>
  17.   </StackPanel>
  18.  </Border>
  19. </Grid>
  20. </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.


---------------
Montre en main: Trouvez votre montre idéale
mood
Publicité
Posté le 21-09-2009 à 21:23:04  profilanswer
 

n°1925752
Cheinz
Posté le 22-09-2009 à 11:22:11  profilanswer
 

Oui c'est une solution a laquelle j'ai pensé... mais plutôt en dernier recours car pour moi l'idéal est d'avoir un affichage "mois" ou on consulte et un affichage "semaine" ou on peut modifier, tout en me servant (et c'est la que ça coince) des mêmes entités.

 

Ce que j'ai fais hier, c'est ajouter a ma classe MenuJourNormal un attribut listeProduits contenant la liste des produits, je peux donc afficher ma ComboBox avec la liste cependant il faut qu'elle soit cachée dans l'affichage "mois" et active dans l'affichage "semaine" et ça je ne sais pas faire ^^. Je ne sais pas non plus comment synchroniser ce Combo pour qu'il prenne par défaut la valeur du label correspondant dans mon MenuJourNormal mais bon ça ce n'est pas dramatique.

 

Niveau conception je ne suis pas sur non plus que ce soit très bon... la théorie voudrait que la liste des produits n'est pas grand chose a faire dans un menu journalier...


Message édité par Cheinz le 22-09-2009 à 11:22:34

---------------
Montre en main: Trouvez votre montre idéale

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Problème WPF / Entity Framework / Data Binding

 

Sujets relatifs
Problème image en FPDFproblème pour écrire un programme
problème newsletter[Resolu]Problème formulaire
Problème de classeProblème erreur 404
Probleme Compilation gccProblème affichage Safari (HTML/CSS)
Problème php pour FPDFProblème de compilation gcc / Repertoires 'include' pas trouvés
Plus de sujets relatifs à : Problème WPF / Entity Framework / Data Binding


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR