0

我想创建上下文菜单项集合,其中每个项目都有标题、命令、可以执行命令,还想添加一个新功能以提高可见性,该功能也类似于“canExecute”,但具有其他条件。

当我在我的行上按下时,DataGrid我想创建一个新的上下文菜单,其中包含绑定到上下文菜单项源(ItemContainerStyle)的集合上下文菜单项。我想在每个菜单项上执行 2 个功能:

  1. CanExecute- 禁用/启用项目
  2. CanSee- 用于更改上下文菜单项的可见性,以防它与项目无关。

最好的方法是什么?

4

1 回答 1

1

您必须已经实现DelegateCommand<T>了,在构造函数中传递另一个Func<T,bool>,并从方法返回按位和委托和委托CanExecute()的 (&&) 。canExecutecanSee

public class DelegateCommand<T> : ICommand
{
   private readonly Action<T> executeMethod;
   private readonly Func<T, bool> canExecuteMethod;
   private readonly Func<T, bool> canSeeMethod;

   public DelegateCommand(Action<T> executeMethod) : this(executeMethod, null)
   {}

   public DelegateCommand(Action<T> executeMethod,
                          Func<T, bool> canExecuteMethod)
            : this(executeMethod, canExecuteMethod, null)
   {}

   public DelegateCommand(Action<T> executeMethod,
                          Func<T, bool> canExecuteMethod,
                          Func<T, bool> canSeeMethod)
   {
      this.executeMethod = executeMethod;
      this.canExecuteMethod = canExecuteMethod;
      this.canSeeMethod = canSeeMethod;
   }

   ...... //Other implementations here

   public bool CanExecute(T parameter)
   {
      if (canExecuteMethod == null) return true;
      return canExecuteMethod(parameter) && canSeeMethod(parameter);
   }
}
于 2014-04-08T17:04:00.093 回答