【发布时间】:2020-09-01 15:11:16
【问题描述】:
我有两个要通过单击按钮触发的命令。所以我创建了一个CompositeCommand,用它注册了我的两个命令,并绑定到我的按钮。我的命令是DelegateCommands。
问题是按钮被禁用,我无法启用它。
我尝试将琐碎的 CanExecute 方法添加到 DeleteCommands,但这并没有解决问题。
我尝试在CompositeCommand 构造函数中将monitorCommandActivity 设置为true。
我想可能是因为我的DelegateCommands 有参数,而CompositeCommand 似乎不能接受任何CommandParameters,所以它可能被禁用了,但我消除了DelegateCommands 中的参数,但事实并非如此解决问题。
View.xaml:
<TextBlock Text="Theme:" />
<telerik:RadComboBox x:Name="_themeComboBox"
ItemsSource="{Binding ThemeList}"
DisplayMemberPath="Name"
SelectedItem="{Binding SelectedTheme, Mode=TwoWay}" />
<telerik:RadButton Content="Apply"
Command="{Binding ThemeApplyAndSaveCommand}" />
ViewModel.cs:
public class ViewModel
{
public ViewModel(ILogger logger, ...)
{
ThemeList = _userSettingsService.GetThemeList();
// Configure the theme Apply button to both select and save the theme
ThemeApplyAndSaveCommand.RegisterCommand(ThemeApplyCommand);
ThemeApplyAndSaveCommand.RegisterCommand(ThemeSaveCommand);
// Activate the user's preferred theme
SelectedTheme = _userSettingsService.GetThemePreference(securityContext.User);
ThemeApplyCommand.Execute();
logger.Debug(" ThemeApplyCommand.CanExecute: {canExecute}", ThemeApplyCommand.CanExecute());
logger.Debug(" ThemeSaveCommand.CanExecute: {canExecute}", ThemeSaveCommand.CanExecute());
logger.Debug(" ThemeApplyAndSaveCommand.CanExecute: {canExecute}", ThemeApplyAndSaveCommand.CanExecute(null));
}
public CompositeCommand ThemeApplyAndSaveCommand => new CompositeCommand();
public DelegateCommand ThemeApplyCommand => new DelegateCommand(ExecuteThemeApplyCommand);
public DelegateCommand ThemeSaveCommand => new DelegateCommand(ExecuteThemeSaveCommand);
private void ExecuteThemeApplyCommand()
{
...
}
private void ExecuteThemeSaveCommand()
{
...
}
}
【问题讨论】: