WPF - Binding не является допустимым условием триггера
Есть две кнопки, назад и вперёд, которые взаимодействуют с массивом и изменяют индекс элемента, который надо достать из массива.
Пытаюсь сделать так, чтобы кнопка назад была недоступна, если выбран первый элемент массива, а кнопка вперед была недоступна, если выбран последний элемент массива. Сначала хотел сделать два свойства (IsFirstElement, IsLastElement), сделать для кнопок триггеры и в коде уже проверять на первый и последний элемент, а затем менять значение свойств. Потом подумал, что можно просто сравнивать выбранный элемент с единицей (в случае кнопки назад) и с количеством элементов в массиве (в случае кнопки вперёд). Вот реализация кнопки назад:
<Button Content="Назад">
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding PhotoIndex}" Value="1">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
Вот реализация кнопки вперед:
<Button Content="Вперед">
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding PhotoIndex}" Value="{Binding PhotoCount}">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
При биндинге PhotoCount к Value выдает ошибку из шапки темы. Подскажите, можно ли как-то без дополнительных свойств реализовать мою задумку? Возможно необходимо использовать другие триггеры или какие-то дополнительные свойства? Заранее извиняюсь, если такой вопрос уже был, но ответа я не нашёл.
Ответы (1 шт):
Реализовал не через триггеры, а по совету @EvgeniyZ через команды. Реализация выглядит так:
private RelayCommand nextPhotoCommand;
public RelayCommand NextPhotoCommand
{
get
{
return nextPhotoCommand ??
(nextPhotoCommand = new RelayCommand(x => {CurrentPhoto = Photos[++PhotoIndex];},
obj => {return (PhotoIndex != PhotoCount);}));
}
}
С помощью этого кода определяется возможность исполнения команды (CanExecute):
obj => {return (PhotoIndex != PhotoCount);}