2016-09-21 66 views
0

我一直在閱讀職位最多的一天,並不能找到這樣或看着辦吧。幾乎所有的問題和答案在XAML中構建菜單,但我試圖在代碼中執行此操作。如何將命令綁定到一個菜單項在C#WPF

菜單建立精細(有更多的它,這裏只是略),並啓用或禁用正常,但我不能得到執行的命令。菜單功能區上有一個按鈕可以重新提交,所以我知道後端代碼的工作原理,我似乎無法弄清楚如何從菜單調用它。任何想法都會很好。

鼠標事件建立,並MainView.xaml.cs顯示菜單。有線上的**需要修復。

private void MainDataGrid_MouseRightButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    ContextMenu m = new ContextMenu(); 
    MenuItem mi = new MenuItem(); 

    m.Items.Add(new MenuItem()); 
    mi = (MenuItem)m.Items[0]; 
    mi.Header = "Resubmit"; 
    **mi.CommandBindings.Add(new CommandBinding(ApplicationCommands.New, ResubmitCommand));** 
    mi.IsEnabled = MainViewModel.CurrentSelectedItems.Count > 0; 
    . 
    . 
    . 
    m.IsOpen = true; 
} 

的ResubmitCommand從我MainViewModel.cs:

public ICommand ResubmitCommand 
{ 
    get 
    { 
     return _resubmitCommand ?? 
     (_resubmitCommand = new RelayCommand(
     o => Resubmit(), 
     o => CanResubmit)); 
    } 
} 

感謝。

+0

如果有人在發表評論時解釋原因,有人會投票否決,這真的很讓人煩惱。如果你不能想到一個理由,就放棄它。 – CodeChops

回答

1

您可以只設置菜單項的Command屬性:

mi.Command = ResubmitCommand; 

默認情況下,ApplicationCommands.New只支持輸入手勢Ctrl+N,通常綁定到th主窗口。您可以將它綁定到菜單項上的左鍵單擊:

mi.CommandBindings.Add(new CommandBinding(ApplicationCommands.New,Resubmit)); 

var leftClickGesture= new MouseGesture(MouseAction.LeftClick); 
mi.InputBindings.Add(new InputBinding(ApplicationCommands.New, leftClickGesture)); 
+0

感謝您的回覆,但我嘗試過。我得到「'ResubmitCommand'在當前上下文中不存在。」它實際上在一個不同的類中,並作爲一個RelayCommand來執行。它的設置就像那個帶狀按鈕,但我試圖從ContextMenu調用它。 – CodeChops

+0

我更新了我的答案 –

+1

太棒了,就是這麼做的。我不得不刪除該行:mi.CommandBindings.Add(new CommandBinding(ApplicationCommands.New,Resubmit));並在代碼的其他地方修改一些東西,並做到這一點。 – CodeChops

0

的線條:

m.Items.Add(new MenuItem()); 
mi = (MenuItem)m.Items[0]; 

應改爲只:

m.Items.Add(mi); 
+0

這並沒有解決這個問題。 – CodeChops

相關問題