C# 按钮中的DataTrigger绑定未反映在值更改上
我有一个按钮,其可见性将根据绑定值而改变。这是我的密码C# 按钮中的DataTrigger绑定未反映在值更改上,c#,wpf,data-binding,datatrigger,C#,Wpf,Data Binding,Datatrigger,我有一个按钮,其可见性将根据绑定值而改变。这是我的密码 <Button Content="Click Me" Grid.Column="1" Click="Button_Click" Width="100" Height="100"> <Button.Style> <Style TargetType="Button"> <Setter Prop
<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>
我是C#的初学者,已经习惯了数据绑定。请告诉我哪里出了问题。您应该从isShow
属性的设置器中实现并引发属性更改事件,以便在源属性动态设置为新值时刷新可见性
:
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>
<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>