IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

WPF Interface Utilisateur dynamique


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2015
    Messages : 26
    Points : 36
    Points
    36
    Par défaut WPF Interface Utilisateur dynamique
    Bonjour, je vais tenté d'être le plus clair possible. Dans une solution WPF j'ai plusieurs fenêtre de menu composées de boutons. Ces boutons sont crées par l'utilisateur (via un module annexe) et stockés dans une table SQL.
    Au lancement de l'application les menus sont construits via une requête. Pour optimiser le code je souhaite faire une classe comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     public static List<T> CreateButtonsInterface<T>(IEnumerable<T> query, StackPanel stackPanel)
     {
         foreach (Button button in from item in query
                                   let button = new Button
                                   {
                                       Content = ??,
                                       CommandParameter = ??,
                                       Margin = new System.Windows.Thickness(5),
                                       Padding = new System.Windows.Thickness(5)
                                   }
                                   select button)
         {
             stackPanel.Children.Add(button);
         }
     
         return query.ToList();
     }
    et l'utiliser comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     private void SetPanelItems_Btn_Click(object sender, RoutedEventArgs e)
     {
         using (MAGISOFT2024Entities dc = new MAGISOFT2024Entities())
         {
             _ = CreateInterfaces.CreateButtonsInterface(from a in dc.PARAM_MAGISOFT.AsEnumerable().Take(5)
                                                         select new
                                                         {
                                                             code = a.CODE_PARAMETRE.Trim(),
                                                             titre = a.TITRE.Trim()
                                                         }, ButtonsPanel, ??, ??)
     }
    Vous aurez compris je pense que mon soucis se situe sur les "??". Comment au niveau de la classe passer des paramètres qui vont récupérer les valeurs de la requête ??
    J'espère avoir été clair...

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 247
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 247
    Points : 1 820
    Points
    1 820
    Par défaut
    pas sûr d'avoir bien compris, mais l'utilisateur dans le module annexe défini quoi à propos des boutons ? l'ordre, l'intitulé et la fonction que le bouton doit exécuter (on lui propose une liste d'action et d'intitulé, ou ? ) ?
    et ces données sont dans la base. La base est commune à plusieurs utilisateurs ? donc il doit y avoir une liaison entre une configuration de bouton et le nom utilisateur.

    Dans ton code d'utilisation, tu n'as pas besoin de tes paramètres "??" vu que dans ta classe, tu n'en attends que 2.
    Dans celle-ci, vu que tu parcours le résultat de ta requête, c'est un élément de celle-ci donc item.code et item.titre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     public static List<T> CreateButtonsInterface<T>(IEnumerable<T> query, StackPanel stackPanel)
     {
         foreach (Button button in from item in query
                                   let button = new Button
                                   {
                                       Content = item.titre,
                                       CommandParameter = item.code,
                                       Margin = new System.Windows.Thickness(5),
                                       Padding = new System.Windows.Thickness(5)
                                   }
                                   select button)
         {
             stackPanel.Children.Add(button);
         }
     
         return query.ToList();
     }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     private void SetPanelItems_Btn_Click(object sender, RoutedEventArgs e)
     {
         using (MAGISOFT2024Entities dc = new MAGISOFT2024Entities())
         {
             _ = CreateInterfaces.CreateButtonsInterface(from a in dc.PARAM_MAGISOFT.AsEnumerable().Take(5)
                                                         select new
                                                         {
                                                             code = a.CODE_PARAMETRE.Trim(),
                                                             titre = a.TITRE.Trim()
                                                         }, ButtonsPanel)
     }

  3. #3
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 730
    Points : 5 388
    Points
    5 388
    Par défaut
    CreateButtonsInterface n'a que deux paramètres, donc tu peux déjà supprimer les ?? lorsque tu l'appelles.

    Dans CreateButtonsInterface, les données sont issues de ta requête sur l'entité PARAM_MAGISOFT.
    Et cette requête renvoie une collection d'objets avec code et titre.
    Ce sont donc code et titre qu'il faut utiliser à la place des ??.

    Edit : Grillé par umfred

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/12/2015, 11h39
  2. Réponses: 1
    Dernier message: 18/01/2013, 08h36
  3. Réponses: 1
    Dernier message: 18/01/2013, 08h36
  4. [WPF] Interface utilisateur
    Par gege02 dans le forum Windows Presentation Foundation
    Réponses: 15
    Dernier message: 11/05/2007, 14h02
  5. interface utilisateur avec OpenGL
    Par demis20 dans le forum OpenGL
    Réponses: 6
    Dernier message: 03/10/2002, 12h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo