如何使用可以从Window和UserControl调用的Command(通过点击其中的按钮)使用相同的execute和can-execute方法?好像我的UserControl的XAML中有以下内容,它需要myCommandHandler
和canExecuteMyCommand
在我的UserControl类中:
<CommandBinding Command="{x:Static local:MyUserControl.MyCommand}"
Executed="myCommandHandler"
CanExecute="canExecuteMyCommand"/>
然后,如果我想在我的窗口中使用相同的命令,我再次需要在我的Window类中定义myCommandHandler
和canExecuteMyCommand
。如何定义一个Command,以便我的UserControl和Window都可以访问它,但myCommandHandler
和canExecuteMyCommand
只在一个类中定义?我是否需要创建自己的命令类,而不是在RoutedCommand
中声明静态MyUserControl
字段?
答案 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