我有一个按钮,其可见性将根据绑定值而变化。这是我的代码
<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>
<DataTrigger Binding="{Binding Path=isShow, Mode=TwoWay}" Value="False">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
public bool isShow { get; set; }
private void Button_Click(object sender, RoutedEventArgs e)
{
this.isShow = !this.isShow;
}
我是C#的初学者,已经习惯了数据绑定。请让我知道我哪里出了错。
答案 0 :(得分:1)
您应该实现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>