Если вы используете шаблон проектирования MVVM, вы можете использовать состояние «CanExecute» для команды, связанной с кнопкой, для достижения этой цели.
Поведение кнопки по умолчанию будетбудет отображаться отключенным, но вы можете изменить его, чтобы он не отображался в приведенном ниже примере.
ViewModel
Свойстводля свойства команды:
public DelegateCommand<TypeOfBoundItem> TheCommand
{
get; private set;
}
Создание экземпляра команды (в конструкторе модели представления):
TheCommand = new DelegateCommand<TypeOfBoundItem>( Execute, CanExecute );
Методы выполнения команды и определения, может ли она быть выполнена:
private bool CanExecute( TypeOfBoundItem item )
{
return true or return false;
}
private bool Execute()
{
// some logic
}
Просмотр
В ресурсах UserControl или Window выОпределите некоторый конвертер visibilty:
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
Для кнопки вы определяете привязку, устанавливающую атрибут «Видимость» кнопки к значению состояния кнопок «IsEnabled», применяя конвертер.
Итак, если состояние «IsEnabled» истинно - потому чтоbound «TheCommand» возвращает true в своем методе «CanExecute» - кнопка будет видимой.
Если метод «CanExecute» связанной команды возвращает false, кнопка не будет видна.
<Button Command="{Binding TheCommand}"
CommandParameter="{Binding}"
Visibility="{Binding RelativeSource={RelativeSource Self},
Path=IsEnabled,
UpdateSourceTrigger=PropertyChanged,
Converter={StaticResource BooleanToVisibilityConverter}}">
</Button>