Menu en MVVM C#

Menu en MVVM C# - C#/.NET managed - Programmation

Marsh Posté le 06-11-2019 à 12:51:02    

Bonjour à tous
 
J'essaie de réaliser un menu en MVVM C#.
Je n'arrive pas à faire fonctionner les commandes.
Quelqu'un peut-il trouver l'erreur que je commets?
je joints les fichiers nécessaires.
Merci d'avance...
 
La Vue:

Code :
  1. <Window x:Class="Cuisine.MainWindow"
  2.         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5.         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6.         xmlns:local="clr-namespace:Cuisine"
  7.         xmlns:ViewModels="clr-namespace:Cuisine.ViewModels"
  8.         xmlns:ControlzEx="clr-namespace:ControlzEx;assembly=MaterialDesignThemes.Wpf"
  9.         x:Name="WindowPrincipal"
  10.         mc:Ignorable="d"
  11.        
  12.         Title="MainWindow"
  13.         Height="450"
  14.         Width="800"
  15.         WindowStyle="None"
  16.         WindowStartupLocation="CenterScreen"
  17.         WindowState="Maximized"
  18.         xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
  19.         Background="{DynamicResource MaterialDesignPaper}"
  20.         TextElement.Foreground="{DynamicResource MaterialDesignBody}">
  21.     <Window.DataContext>
  22.         <ViewModels:MainViewModel />
  23.     </Window.DataContext>
  24.     <Window.Resources>
  25.         <Style x:Key="MenuStyle" TargetType="MenuItem" BasedOn="{StaticResource {x:Type MenuItem}}">
  26.             <Setter Property="Icon" Value="{DynamicResource ResourceKey=Icone}"/>
  27.             <Setter Property="Command" Value="{Binding CommandeMenu}" />
  28.             <Setter Property="CommandParameter" Value="{Binding  ElementName=Text ,Path=Content}"/>
  29.         </Style>
  30.         <Image x:Key="Icone" Source="{Binding IconeSousMenu}" x:Shared="false"/>
  31.     </Window.Resources>
  32. <Grid x:Name="GrdMenu"
  33.               Background="#FFDCEDC8"
  34.               Grid.ColumnSpan="2"
  35.               Grid.Row="1" VerticalAlignment="Top" MaxHeight="30">
  36.                 <Menu x:Name="MenuPrincipal"
  37.                   IsMainMenu="True"
  38.                   Background="{x:Null}"
  39.                   Foreground="#FF9CCC65"
  40.                   FontFamily="Comic Sans MS"
  41.                   FontSize="12"
  42.                   ItemsSource="{Binding ItemMenu }" Margin="50,0,0,0">
  43.                 <Menu.ItemTemplate>
  44.                    
  45.                     <HierarchicalDataTemplate ItemsSource="{Binding Path=ItemSousMenus}"
  46.                                               ItemContainerStyle="{StaticResource MenuStyle}">
  47.                         <TextBlock Text="{Binding NomMenu}" Height="30" Width="Auto"/>
  48.                         <HierarchicalDataTemplate.ItemTemplate >
  49.                             <DataTemplate>
  50.                                 <TextBlock Text="{Binding NomSousMenu}">
  51.                                 </TextBlock>
  52.                             </DataTemplate>
  53.                         </HierarchicalDataTemplate.ItemTemplate>
  54.                         </HierarchicalDataTemplate>
  55.                     </Menu.ItemTemplate>
  56.             </Menu>
  57.            
  58.                
  59.         </Grid>


 
Le Model:

Code :
  1. namespace Cuisine.Models
  2. {
  3.     public class ItemMenus : Notifiable
  4.     {
  5.         public ItemMenus()
  6.         {
  7.             //ItemSousMenu = new ObservableCollection<ItemSousMenu>(ServiceMenu.GetSousMenus(NomMenu));
  8.         }
  9.         private string nomMenu;
  10.         public string NomMenu
  11.         {
  12.             set
  13.             {
  14.                 nomMenu = value;
  15.                 RaisePropertyChanged(nameof(ItemMenus.NomMenu));
  16.             }
  17.             get
  18.             {
  19.                 return nomMenu;
  20.             }
  21.         }
  22.         private ObservableCollection<ItemSousMenu> itemSousMenus;
  23.         public ObservableCollection<ItemSousMenu> ItemSousMenus
  24.         {
  25.             set
  26.             {
  27.                 itemSousMenus = value;
  28.                 RaisePropertyChanged(nameof(ItemMenus.ItemSousMenus));
  29.             }
  30.             get
  31.             {
  32.                 return new ObservableCollection<ItemSousMenu>(ServiceMenu.GetSousMenus(NomMenu));
  33.             }
  34.         }
  35.     }
  36. }


 
Le ViewModel:

Code :
  1. namespace Cuisine.ViewModels
  2. {
  3.     public class MainViewModel : Notifiable
  4.     {
  5.         #region Constructeur
  6.         public MainViewModel()
  7.         {
  8.             ItemMenu = new ObservableCollection<ItemMenus>(ServiceMenu.GetMenus());
  9.         }
  10.         #endregion
  11.         #region ObservableCollection
  12.         // Collection pour les menus
  13.         private ObservableCollection<ItemMenus> itemMenu;
  14.         public ObservableCollection<ItemMenus> ItemMenu
  15.         {
  16.             set
  17.             {
  18.                 itemMenu = value;
  19.                 RaisePropertyChanged(nameof(MainViewModel.ItemMenu));
  20.             }
  21.             get
  22.             {
  23.                 return itemMenu;
  24.             }
  25.         }
  26.         // Collection pour les commandes
  27.         private BasicAction commandeMenu;
  28.         public BasicAction CommandeMenu
  29.         {
  30.             set
  31.             {
  32.                 commandeMenu = value;
  33.                 RaisePropertyChanged(nameof(MainViewModel.CommandeMenu));
  34.             }
  35.             get
  36.             {
  37.                 if (commandeMenu == null)
  38.                 {
  39.                     CommandeMenu = new BasicAction(param => Menu(param.ToString()));
  40.                 }
  41.                 return CommandeMenu;
  42.             }
  43.         }
  44.         #endregion
  45.         #region Méthodes
  46.         private void Menu(string Titre)
  47.         {
  48.             string t = Titre;
  49.         }
  50.         #endregion
  51.     }
  52. }

Reply

Marsh Posté le 06-11-2019 à 12:51:02   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed