Мой лучший совет: используйте команду (я обычно использую Prism DelegateCommand
или DelegateCommand<T>
, вы можете загрузить Prism пакет через NuGet, что делает его буквально безболезненным).
Затем вы привязываете команду вашей кнопки к команде:
<Button Command="{Binding MyCommand}" />
Метод команды CanExecute
определяет, будет ли кнопка включена или отключена.
Другой подход - предоставить свойство IsEnabled
в ItemViewModel, а затем привязать к нему свойство IsEnabled на кнопке.
Если вам необходимо привязать свойство в родительской ViewModel, вы можете получить его из шаблона несколькими способами.
Вот некоторые из них:
<UserControl x:Class="MyControl" x:Name="this" ...>
<...>
<DataTemplate>
<Grid>
<Button
IsEnabled="{Binding DataContext.IsEnabled, ElementName=this}"/>
<Button
IsEnabled="{Binding DataContext.IsEnabled,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type MyControl}}}"
</Grid>
</DataTemplate>
</...>
</UserControl>