我如何对ICommands进行分组,以便一个执行中的其他命令无法执行?

时间:2019-03-19 08:19:40

标签: c# wpf mvvm

如果我将ICommand绑定到WPF中的控件,则会根据命令的CanExecute状态启用/禁用ICommand。我知道可以在要分组的ICommand的所有CanExcecute实现中使用一个布尔字段来禁用多个命令的执行。我的问题是,我应该这样做还是在XAML中这样做?有什么“标准”方法可以做到吗?任何.NET类可以管理它吗?

1 个答案:

答案 0 :(得分:1)

.NET Framework中没有包含此类,但您可以看看CompositeCommand类在Prism中是如何实现的。

来自docs

  

它维护子命令列表(DelegateCommand实例)。 Execute类的CompositeCommand方法仅依次对每个子命令调用Execute方法。 CanExecute方法类似地调用每个子命令的CanExecute方法,但是如果无法执行任何子命令,则CanExecute方法将返回false。换句话说,默认情况下,CompositeCommand仅在所有子命令都可以执行时才能执行。

您可以使用RegisterCommand类的CompositeCommand方法来关联子命令:

public DelegateCommand UpdateCommand { get; private set; }

public ViewModel()
{
    UpdateCommand = new DelegateCommand(Update);
    ApplicationCommands.SaveCommand.RegisterCommand(UpdateCommand);
}