2016-09-21 10 views
0

私はほとんどの日、記事を読んできましたが、これを見つけることができないか、それを理解することができません。かなり多くの質問と回答がXAMLのメニューを構築していますが、これをコードで実行しようとしています。C#WPFでMenuItemにコマンドをバインドする方法

メニューはうまくいきます(これ以上はありますが、ここでは省略してあります)、正しく有効または無効にしますが、実行するコマンドを取得できません。メニューのリボンにボタンがありますので、私はバックエンドのコードを知っているので、メニューから呼び出す方法を理解できないようです。どんなアイデアがいいだろう。

MainView.xaml.csからメニューを構築して表示するためのマウスイベント。ライン上には固定が必要な**があります。私MainViewModel.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:

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

感謝。あなただけのメニュー項目のCommandプロパティを設定することができます

m.Items.Add(mi); 
+0

理由を説明するコメントを投稿するにはあまりにも鶏肉があると、誰かに何かを投票させるのは本当に悪化しています。あなたが理由を考えることができない場合は、それだけで離れる。 – CodeChops

答えて

1

+0

返事をありがとうが、私はそれを試みた。私は "ResubmitCommand 'は現在のコンテキストに存在しません。"実際には別のクラスにあり、RelayCommandとして実行されます。リボンボタンのように設定されていますが、ContextMenuから呼び出すようにしています。 – CodeChops

+0

私の答えは –

+1

と更新されました。私は行を削除する必要がありました:mi.CommandBindings.Add(新しいCommandBinding(ApplicationCommands.New、再送信));コード内の他の場所でいくつかの変更を行い、それを実行しました。 – CodeChops

0

ライン:

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

がちょうどに変更する必要があり、デフォルトで

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

それは質問に対処しません。 – CodeChops

関連する問題