2009-12-21 108 views
2

我在我的WPF窗體上運行導入例程的菜單項,我綁定了命令屬性到我的視圖模型中的ICommand屬性,但由於某種原因該方法不會觸發。RelayCommand沒有觸發MenuItem點擊WPF MVVM

這是XAML:

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

而且這是在我的視圖模型:

 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); 
      } 
     } 

這是我用我的窗體上的所有按鈕,但菜單項格局只是不會工作。我錯過了什麼或菜單項必須以不同的方式完成?

謝謝。

+0

你有適當的DataContext進入菜單嗎?這個部分在這個問題上並不清楚。否則它看起來不錯。 – 2009-12-21 22:50:59

+0

是的,如果我在ImportFileCommand上設置了一個斷點,那麼RelayCommand會變得更新,但它只是不想觸發。 – 2009-12-21 22:53:47

回答

4

您的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> 

在您的例子中,菜單項元素的「導入」內容隱含創建父文件菜單項的子菜單項。此子菜單項沒有定義Command屬性,因此無法執行。顯然,在子菜單擴展功能中覆蓋了在子菜單項上定義的命令的可執行性。

+1

我不敢相信我看了看。 – 2009-12-22 22:14:14