2009-12-21 7 views
2

J'ai un élément de menu sur mon formulaire WPF qui exécute une routine d'importation, j'ai lié la propriété de commande à une propriété ICommand dans mon modèle de vue mais pour une raison inconnue.RelayCommand ne se déclenche pas sur MenuItem cliquez sur WPF MVVM

C'est le XAML:

<Menu Height="21" 
       Margin="0,-2,0,0" 
       VerticalAlignment="Top" 
       Grid.ColumnSpan="2"> 
      <MenuItem Header="File" Command="{Binding ImportFileCommand}">Import</MenuItem> 
</Menu> 

Et cela est dans mon modèle de vue:

 private ICommand importfilecommand; 
     public ICommand ImportFileCommand 
     { 
      get 
      { 
       if (this.importfilecommand == null) 
       { 
        this.importfilecommand = new RelayCommand(parm => ImportFile()); 
       } 
       return this.importfilecommand; 
      } 
     } 

     private void ImportFile() 
     { 

      OpenFileDialog dialog = new OpenFileDialog(); 
      dialog.Filter = "Tab Files (*.tab)|*.tab*"; 

      if (dialog.ShowDialog() == true) 
      { 
      // MessageBox.Show(dialog.FileName); 
      } 
     } 

C'est le modèle que je l'ai utilisé pour tous mes boutons sur la forme mais l'élément de menu ça ne marchera pas. Ai-je manqué quelque chose ou est-ce que les éléments de menu doivent être faits différemment?

Merci.

+0

Avez-vous le DataContext approprié dans le menu? Cette partie n'est pas claire à partir de la question. Sinon, ça a l'air bien. –

+0

Ouais, si je mets un point d'arrêt sur ImportFileCommand, le RelayCommand se lève mais il ne veut pas se déclencher. –

Répondre

4

Changer votre XAML à

<Menu Height="21" Margin="0,-2,0,0" VerticalAlignment="Top" Grid.ColumnSpan="2"> 
    <MenuItem Header="File"> 
     <MenuItem Header="Import" Command="{Binding ImportFileCommand}" /> 
    </MenuItem> 
</Menu> 

Dans votre exemple, le contenu « Importer » de l'élément MenuItem crée implicitement un enfant MenuItem du dossier parent MenuItem. Cet objet MenuItem n'a aucune propriété Command définie et ne peut donc pas être exécuté. Apparemment, l'exécutabilité de la commande définie sur le parent MenuItem est remplacée par la fonctionnalité d'extension du sous-menu.

+1

Je ne peux pas croire que j'ai regardé par-dessus. –