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

Windows Presentation Foundation Discussion :

Menu dynamique, Binding, MvvM


Sujet :

Windows Presentation Foundation

  1. #1
    Membre expérimenté Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Par défaut Menu dynamique, Binding, MvvM
    Bonjour à tous, voici mon problème :

    Dans une présentation XAML, j'utilise un menu ainsi définit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <MenuItem  Name="menuFichier"   Header="{DynamicResource IHM.MENU_FICHIER}" >
     <MenuItem Header="{DynamicResource IHM.MENU_FICHIER_OUVRIR}" Command="{Binding Commande_Fic_Ouv}"  InputGestureText="Ctrl+O" Name="MenuFichierOuvrir" />
    ...
    Comme vous le voyez, l'action sur l'item MenuFichierOuvrir permet de déclencher la commande 'Commande_Fic_Ouv' ainsi définit dans le DataContext :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public ICommand Commande_Fic_Ouv
            {
                get
                {
                    if (m_commande_Fic_Ouv == null)
                        m_commande_Fic_Ouv = new DelegateCommand(FichierOuvrir);
                    return m_commande_Fic_Ouv;
                }
            }
    Aujourd'hui, je souhaite faire la même chose mais avec des items de menus construits dynamiquement grâce à un Binding sur une liste d'Observable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <MenuItem  Name="menuFichier"   Header="{DynamicResource IHM.MENU_FICHIER}"                  
                             ItemsSource="{Binding Items}" >
                    <MenuItem.ItemTemplate>
                        <DataTemplate>
                            <vues:MenuItem />
                        </DataTemplate>
                    </MenuItem.ItemTemplate>
    Le Binding se fait sur la propriété 'Items' ainsi définit dans la VueModele :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ObservableCollection<IHMMenuItem> m_items = new ObservableCollection<IHMMenuItem>();
     
            public ObservableCollection<IHMMenuItem> Items
            {
                get { return m_items; }
                set { m_items = value; }
            }
    Chaque item de menu sera dessiné grâce au Template 'vues:MenuItem' ainsi définit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <UserControl x:Class="IHMSimulation.Vues.ControlesUtilisateur.MenuItem"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
     
            <StackPanel  Orientation="Horizontal" Background="Salmon">
                <TextBlock Text="{Binding Path=Texte}"/>
                <Image  Stretch="Fill" Height="64" Width="64" Source="{Binding Path=Image}"/>
     
            </StackPanel>
     
    </UserControl>
    Ma question est : dans ce cas d'items dynamiques, comment fait-on pour lier l'item à une commande ?

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Tu as essayé eb définissant une propriété attachée sur ton contrôle MenuItem ?

  3. #3
    Membre expérimenté Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    Tu as essayé eb définissant une propriété attachée sur ton contrôle MenuItem ?
    Tiens c'est marrant, j'étais justement sur ton blog ! (bravo pour les articles)

    A part ça, je ne sais pas ce qu'est une 'propriété attachée', peux-tu m'en dire un peu + ?

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161

  5. #5
    Membre expérimenté Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Par défaut
    ouais, j'avais fait la recherche sur Google mais je n'ai trouvé aucun lien entre propriété attachée et les Commandes

    et l'article MSDN ne donne pas plus de précision

    Je tiens à utiliser les commandes, c'ets peut-être un tort ?

  6. #6
    Membre éprouvé Avatar de Thrud
    Profil pro
    Développeur .NET
    Inscrit en
    Avril 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2008
    Messages : 170
    Par défaut
    Bonjour,

    Si les items de menu sont dynamiques, la commande est fortement associée à l'item, ça devient donc certainement une Propriété de tes IHMMenuItem.
    Tu as vraiment besoin d'un UserControl pour afficher tes item de menus ? Tu ne pourrais pas te contenter de changer le Template du MenuItem ?
    Si oui, tu peux juste appliquer un style au MenuItem, et tu bind la commande.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <Style TargetType="{x:Type MenuItem}">
    <Setter Property="ItemTemplate">
    <Setter.Value>
    <DataTemplate>
    <StackPanel Orientation="Horizontal" Background="Salmon">
    <TextBlock Text="{Binding Path=Text}" />
    </StackPanel>
    </DataTemplate>
    </Setter.Value>
    </Setter>
    <Setter Property="Command" Value="{Binding Path=Command}"></Setter>
    </Style>
    

  7. #7
    Membre expérimenté Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Par défaut
    Citation Envoyé par Thrud Voir le message
    Bonjour,

    Si les items de menu sont dynamiques, la commande est fortement associée à l'item, ça devient donc certainement une Propriété de tes IHMMenuItem.
    Tu as vraiment besoin d'un UserControl pour afficher tes item de menus ? Tu ne pourrais pas te contenter de changer le Template du MenuItem ?
    Si oui, tu peux juste appliquer un style au MenuItem, et tu bind la commande.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <Style TargetType="{x:Type MenuItem}">
    <Setter Property="ItemTemplate">
    <Setter.Value>
    <DataTemplate>
    <StackPanel Orientation="Horizontal" Background="Salmon">
    <TextBlock Text="{Binding Path=Text}" />
    </StackPanel>
    </DataTemplate>
    </Setter.Value>
    </Setter>
    <Setter Property="Command" Value="{Binding Path=Command}"></Setter>
    </Style>
    
    c'est parfait, merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Free Pascal] Intégrer des valeurs dans un menu dynamique
    Par boullery dans le forum Free Pascal
    Réponses: 16
    Dernier message: 30/03/2005, 18h04
  2. Créer un sous-menu dynamiquement
    Par PurL dans le forum C++Builder
    Réponses: 4
    Dernier message: 09/09/2004, 11h31
  3. [JSP]menu dynamique en jsp
    Par laouedjahmed dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 22/03/2004, 11h50
  4. Menu dynamique sous Flash MX
    Par dens63 dans le forum Flash
    Réponses: 7
    Dernier message: 29/10/2003, 16h46

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