2013-02-28 49 views
1

在我的XAML代码我有一个菜单中包含以下项目:一个Commandhandler多的MenuItems

<Menu x:Name="menu" Grid.Row="0" Background="Transparent" HorizontalAlignment="Right"> 
     <MenuItem Header="Root"> 
      <MenuItem Header="Sub1" Command="{Binding Command}" CommandParameter="{Binding ???}"></MenuItem> 
      <MenuItem Header="Sub2" Command="{Binding Command}" CommandParameter="{Binding ???}"></MenuItem> 
      <MenuItem Header="Sub3" Command="{Binding Command}" CommandParameter="{Binding ???}"></MenuItem> 
      <MenuItem Header="Sub4" Command="{Binding Command}" CommandParameter="{Binding ???}"></MenuItem> 
      <MenuItem Header="Sub5" Command="{Binding Command}" CommandParameter="{Binding ???}"></MenuItem> 
      <MenuItem Header="Sub6" Command="{Binding Command}" CommandParameter="{Binding ???}"></MenuItem> 
     </MenuItem> 
</Menu> 

命令的类型的ICommand的属性。执行是

public class RelayCommand : ICommand 
{ 
    private readonly Action<object> execute; 
    private readonly Predicate<object> canExecute; 

    public RelayCommand(Action<object> execute, Predicate<object> canExecute = null) 
    { 
     if (execute == null) 
      throw new ArgumentNullException("execute"); 
     this.execute = execute; 
     this.canExecute = canExecute; 
    } 

    public void Execute(object parameter) 
    { 
     this.execute(parameter); 
    } 

    public bool CanExecute(object parameter) 
    { 
     return this.canExecute == null || this.canExecute(parameter); 
    } 

    public event EventHandler CanExecuteChanged 
    { 
     add { CommandManager.RequerySuggested += value; } 
     remove { CommandManager.RequerySuggested -= value; } 
    } 
} 

在我的视图模型的构造函数中我有一个线:

this.Command = new RelayCommand(OnMenuItemExecute); 

为OnMenuItemExecute方法是:

private void OnMenuItemExecute(object parameter) 
{ 
    // Here i want to know which menuitem executed the command 
} 

我只是不知道我要高度重视作为命令参数传递

回答

1

如果你想要引用菜单项,你可以使用relat自我的源泉。

<MenuItem Header="Sub1" Command="{Binding Command}" CommandParameter="{Binding RelativeSource={RelativeSource Self}}"></MenuItem> 
+0

谢谢。工程gread。我接受你在8分钟内回答:) – Tomtom 2013-02-28 12:07:31