Bonjour à tous, voici mon problème :
Dans une présentation XAML, j'utilise un menu ainsi définit :
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 <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" /> ...
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
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; } }
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
8 <MenuItem Name="menuFichier" Header="{DynamicResource IHM.MENU_FICHIER}" ItemsSource="{Binding Items}" > <MenuItem.ItemTemplate> <DataTemplate> <vues:MenuItem /> </DataTemplate> </MenuItem.ItemTemplate>
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 ObservableCollection<IHMMenuItem> m_items = new ObservableCollection<IHMMenuItem>(); public ObservableCollection<IHMMenuItem> Items { get { return m_items; } set { m_items = value; } }
Ma question est : dans ce cas d'items dynamiques, comment fait-on pour lier l'item à une commande ?
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>![]()






Répondre avec citation





Partager