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

时间:2010-09-07 18:23:43

标签: c# wpf xaml dry

如何使用可以从Window和UserControl调用的Command(通过点击其中的按钮)使用相同的execute和can-execute方法?好像我的UserControl的XAML中有以下内容,它需要myCommandHandlercanExecuteMyCommand在我的UserControl类中:

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

然后,如果我想在我的窗口中使用相同的命令,我再次需要在我的Window类中定义myCommandHandlercanExecuteMyCommand。如何定义一个Command,以便我的UserControl和Window都可以访问它,但myCommandHandlercanExecuteMyCommand只在一个类中定义?我是否需要创建自己的命令类,而不是在RoutedCommand中声明静态MyUserControl字段?

2 个答案:

答案 0 :(得分:1)

在我看来,你能做的最好的事情就是编写自己的命令,因为正如你所说,你可以在不同的控件和Windows中重复使用它。

创建自定义命令的第一种方法是从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}" />

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

答案 1 :(得分:0)

您可以尝试使用DelegateCommand或RelayCommand