Вы должны реализовать INotifyPropertyChanged
и вызвать событие PropertyChanged
из установщика свойства isShow
для Visibility
, чтобы обновляться всякий раз, когда для свойства источника динамически устанавливается новое значение :
public class MainWindow : Window, INotifyPropertyChanged
{
...
private bool _isShow;
public bool isShow
{
get { return _isShow; }
set { _isShow = value; NotifyPropertyChanged(); }
}
private void Button_Click(object sender, RoutedEventArgs e)
{
this.isShow = !this.isShow;
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
Вы также можете удалить один из триггеров:
<Button Content="Click Me" Grid.Column="1" Click="Button_Click" Width="100" Height="100">
<Button.Style>
<Style TargetType="Button">
<Setter Property="Visibility" Value="Visible"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=isShow, Mode=TwoWay}" Value="True">
<Setter Property="Visibility" Value="Hidden"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>