2009-11-20 4 views
0

Я создаю Menu и привязываю MenuItem s во время выполнения следующим образом, но я не могу заставить его работать.WPF - Bind Menu Item

я создаю Menu следующим образом:

Menu menu = new Menu();  
    menu.Items.Add(new MenuItem { Command = new PackCommand(), Header = "Pack" }); 
    DockPanel.SetDock(menu, Dock.Top); 
    content.Children.Add(menu); 

И я реализую ICommand:

public static class PackCommand : ICommand 
{ 
    Boolean CanExecute(object parameter) 
    { 
    return true; 
    } 

    void Execute(object parameter) 
    { 
    Packer packer = new Packer(); 
    packer.Run(); 
    } 
} 
  1. Я не знаю, как связать MenuItem.
  2. Почему CanExecute? Разве это не всегда? Я только хочу запустить упаковщик. Запустите, когда щелкнут buttom.

Я думаю, что должен реализовать ICommand, но я даже не уверен, что должен это делать?

Может кто-нибудь, пожалуйста, помогите мне?

Спасибо, Miguel

+0

Что происходит? появляется меню? если вы положили точку останова на метод execute, это попадет ?. –

ответ

0

Есть, конечно, случаи, когда вы хотите реализовать CanExecute, потому что это то, что контролирует состояние кнопки. Например, у вас может быть кнопка, которую вы не хотите, чтобы пользователи нажимали, пока не сделали что-то еще. В CanExecute вы можете проверить состояние GUI и убедиться, что это происходит.

Если вы всегда хотите, чтобы кнопка была нажата/выполнима, верните true.

Что касается привязки, в вашем XAML вы можете указать команду в элементе MenuItem. Что-то вроде:

<MenuItem Command="PackCommand" Header="MyHeader" /> 

Теперь вам по-прежнему необходимо правильно определить свою команду в коде. Вот как я сделал мои команды раньше - возможно, это поможет вам начать работать в правильном направлении:

public class GUICommands 
{ 
    private static RoutedUICommand start; 

    static GUICommands() 
    { 
     start = new RoutedUICommand("Start", "Start", typeof(GUICommands)); 
    } 

    public static RoutedUICommand Start 
    { 
     get { return start; } 
    } 
} 

FYI, в моем XAML, я бы связал свою команду:

<MenuItem Command="my:GUICommands.Start" /> 

где «my» - это xmlns, который я объявил в своем XAML, который соответствует пространству имен, частью которого являются GUICommands.