Partage
  • Partager sur Facebook
  • Partager sur Twitter

C# WPF/ Menu en MVVM

Problèmes avec les commandes

Sujet résolu
    6 novembre 2019 à 13:08:19

    Bonjour à tous,

    Je réalise un menu en MVVM C#. Je n'arrive pas à comprendre pourquoi les commandes ne fonctionnent pas.

    Quelqu'un peut-il m'aider.

    Merci d'avance...

    La vue:

    <Window x:Class="Cuisine.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:Cuisine"
            xmlns:ViewModels="clr-namespace:Cuisine.ViewModels"
            xmlns:ControlzEx="clr-namespace:ControlzEx;assembly=MaterialDesignThemes.Wpf" 
            x:Name="WindowPrincipal" 
            mc:Ignorable="d"
            
            Title="MainWindow" 
            Height="450" 
            Width="800" 
            WindowStyle="None" 
            WindowStartupLocation="CenterScreen" 
            WindowState="Maximized"
            xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
            Background="{DynamicResource MaterialDesignPaper}"
            TextElement.Foreground="{DynamicResource MaterialDesignBody}">
    
        <Window.DataContext>
            <ViewModels:MainViewModel />
        </Window.DataContext>
    
        <Window.Resources>
            <Style x:Key="MenuStyle" TargetType="MenuItem" BasedOn="{StaticResource {x:Type MenuItem}}">
                <Setter Property="Icon" Value="{DynamicResource ResourceKey=Icone}"/>
                <Setter Property="Command" Value="{Binding CommandeMenu}" />
                <Setter Property="CommandParameter" Value="{Binding  ElementName=Text ,Path=Content}"/>
            </Style>
    
            <Image x:Key="Icone" Source="{Binding IconeSousMenu}" x:Shared="false"/>
        </Window.Resources>
    	
    	<Grid x:Name="GrdMenu" 
                  Background="#FFDCEDC8" 
                  Grid.ColumnSpan="2" 
                  Grid.Row="1" VerticalAlignment="Top" MaxHeight="30">
    
                    <Menu x:Name="MenuPrincipal"
                      IsMainMenu="True" 
                      Background="{x:Null}" 
                      Foreground="#FF9CCC65" 
                      FontFamily="Comic Sans MS" 
                      FontSize="12" 
                      ItemsSource="{Binding ItemMenu }" Margin="50,0,0,0">
                    <Menu.ItemTemplate>
                        
                        <HierarchicalDataTemplate ItemsSource="{Binding Path=ItemSousMenus}" 
                                                  ItemContainerStyle="{StaticResource MenuStyle}">
                            <TextBlock Text="{Binding NomMenu}" Height="30" Width="Auto"/>
                            <HierarchicalDataTemplate.ItemTemplate >
                                <DataTemplate>
                                    <TextBlock Text="{Binding NomSousMenu}">
                                    </TextBlock>
                                </DataTemplate>
                            </HierarchicalDataTemplate.ItemTemplate>
                            </HierarchicalDataTemplate>
                        </Menu.ItemTemplate>
    
    
                </Menu>
                
                    
            </Grid>

    Le model:

    namespace Cuisine.Models
    {
        public class ItemMenus : Notifiable
        {
            public ItemMenus()
            {
                //ItemSousMenu = new ObservableCollection<ItemSousMenu>(ServiceMenu.GetSousMenus(NomMenu));
            }
            private string nomMenu;
            public string NomMenu
            {
                set
                {
                    nomMenu = value;
                    RaisePropertyChanged(nameof(ItemMenus.NomMenu));
                }
                get
                {
                    return nomMenu;
                }
            }
    
            private ObservableCollection<ItemSousMenu> itemSousMenus;
            public ObservableCollection<ItemSousMenu> ItemSousMenus
            {
                set
                {
                    itemSousMenus = value;
                    RaisePropertyChanged(nameof(ItemMenus.ItemSousMenus));
                }
                get
                {
                    return new ObservableCollection<ItemSousMenu>(ServiceMenu.GetSousMenus(NomMenu));
                }
            }
        }
    }
    

    Le ViewModel:

    namespace Cuisine.ViewModels
    {
        public class MainViewModel : Notifiable
        {
            #region Constructeur
            public MainViewModel()
            {
                ItemMenu = new ObservableCollection<ItemMenus>(ServiceMenu.GetMenus());
            }
            #endregion
    
            #region ObservableCollection
            // Collection pour les menus
            private ObservableCollection<ItemMenus> itemMenu;
            public ObservableCollection<ItemMenus> ItemMenu
            {
                set
                {
                    itemMenu = value;
                    RaisePropertyChanged(nameof(MainViewModel.ItemMenu));
                }
                get
                {
                    return itemMenu;
                }
            }
    
            // Collection pour les commandes
            private BasicAction commandeMenu;
            public BasicAction CommandeMenu
            {
                set
                {
                    commandeMenu = value;
                    RaisePropertyChanged(nameof(MainViewModel.CommandeMenu));
                }
                get
                {
                    if (commandeMenu == null)
                    {
                        CommandeMenu = new BasicAction(param => Menu(param.ToString()));
                    }
                    return CommandeMenu;
    
                }
            }
            #endregion
    
            #region Méthodes
            private void Menu(string Titre)
            {
                string t = Titre;
            }
            #endregion
        }
    }
    




    • Partager sur Facebook
    • Partager sur Twitter

    C# WPF/ Menu en MVVM

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown