代码之家  ›  专栏  ›  技术社区  ›  Sarah Vessels

WPF命令-从Window和UserControl调用,处理程序相同

  •  2
  • Sarah Vessels  · 技术社区  · 15 年前

    我怎么能有一个命令,既可以从窗口调用,也可以从用户控件调用(通过点击其中一个按钮),它使用相同的execute和can execute方法?如果我在UserControl的XAML中有以下内容,它需要 myCommandHandler canExecuteMyCommand

    <CommandBinding Command="{x:Static local:MyUserControl.MyCommand}"
                    Executed="myCommandHandler"
                    CanExecute="canExecuteMyCommand"/>
    

    如果我想在窗口中使用相同的命令,我需要 myCommand处理程序 在窗口的类中定义。如何定义一个命令,使我的UserControl和Window都可以访问它,但是 canExecuteMyCommand命令 只在一个类中定义?我需要创建自己的命令类而不是声明一个静态命令吗 RoutedCommand 字段输入 MyUserControl ?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Mario Pistrich    15 年前

    在我看来,最好的办法是编写自己的命令,因为正如您所说的,您可以在不同的控件和窗口中重用它。

    创建自定义命令的第一种方法是从 ICommand . 下面是一个基本命令类的示例:

    public abstract class BaseCommand : ICommand
    {
        protected IMyViewModel viewModel;
    
        public event EventHandler CanExecuteChanged
        {
            add { CommandManager.RequerySuggested += value; }
            remove { CommandManager.RequerySuggested -= value; }
        }
    
        public BaseCommand(IMyViewModel viewModel)
        {
            this.viewModel = viewModel;
        }
    
        public abstract bool CanExecute(object parameter);
        public abstract void Execute(object parameter);
    }
    

    <Button Command="{Binding Path=MyReuseableCommand,
                      UpdateSourceTrigger=PropertyChanged}" />
    

    我希望这能帮你找到正确的方向。

        2
  •  0
  •   Prince Ashitaka    15 年前

    你可以试试DelegateCommand或者RelayCommand

    推荐文章