Я использую WPF с шаблоном MVVM. У меня есть кнопка и две команды. Кроме того, у меня есть флажок. И я хочу привязать к кнопке разные команды, в зависимости от флажка IsChecked или нет, например
Если я нажму кнопку, появится окно сообщения;
если я поставлю флажок и нажму кнопку, откроется новое окно или что-то еще ..
У меня есть решение для этого, но я думаю, что может быть решение получше:
Моя модель просмотра:
ICommand command1 { get; set; }
ICommand command2 { get; set; }
ICommand commandSelector
{
get
{
if (checkbox)
{
return command1;
}
else
{
return command2;
}
}
private set { }
}
Мой XAML:
<Button Label = "DO" Command = "{Binding commandSelector}"/>
Я бы просто использовал 2 кнопки и один из многих способов, чтобы одновременно отображалась только 1 кнопка: привязка Visibility, шаблоны данных, селектор шаблонов, триггер данных стиля и т. д.





в триггере можно изменить привязку свойства Command:
<Button Label = "DO">
<Button.Style>
<Style TargetType = "Button">
<Setter Property = "Command" Value = "{Binding command2}"/>
<Style.Triggers>
<DataTrigger Binding = "{Binding IsChecked, ElementName=someCheckBox}" Value = "True">
<Setter Property = "Command" Value = "{Binding command1}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
но, вероятно, лучше иметь одну команду и выполнять разные действия в зависимости от состояния проверки в обработчике команд:
ICommand commandSelector { get; set; }
private void commandSelectorExecute(object o)
{
if (checkbox)
DoSmth();
else
DoSmthElse();
}
Я думаю, что это лучший способ сделать это .. Я бы не стал менять команды на checkstate, а наоборот.
Возможный дубликат Привязка команд к событиям ToggleButton Checked и Unchecked