【问题标题】:DataTrigger Binding in Button not reflected on value change按钮中的 DataTrigger 绑定未反映在值更改上
【发布时间】:2020-08-05 00:51:23
【问题描述】:

我有一个按钮,其可见性会根据绑定值而改变。这是我的代码

        <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# 的初学者,并且习惯了数据绑定。请让我知道我哪里出错了。

【问题讨论】:

    标签: c# wpf data-binding datatrigger


    【解决方案1】:

    您应该实现INotifyPropertyChanged 并从isShow 属性的设置器中引发PropertyChanged 事件,以便在源属性被动态设置为新值时刷新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>
    

    【讨论】:

      猜你喜欢
      • 2017-02-19
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2023-02-10
      • 1970-01-01
      • 1970-01-01
      • 2013-09-05
      • 2018-07-08
      相关资源
      最近更新 更多