简单数据触发器不工作.为什么?

本文关键字:为什么 工作 数据 触发器 简单 | 更新日期: 2023-09-27 18:21:42

我正试图根据bool属性更改文本块的前景色,单击按钮时该属性的值会更改。然而,由于某种原因,这是行不通的。另外,我必须首先将bool属性添加到列表中吗?我尝试将bool属性直接添加到DataContext中,但这也不起作用。如有任何帮助,我们将不胜感激。

    public static bool IsOn { get; set; }
    public static List<bool> boo;
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        IsOn = true;
        boo = new List<bool>();
        boo.Add(IsOn); 
        DataContext = boo;                   
    }
<Window.Resources>
    <Style TargetType="TextBlock">
        <Setter Property="Foreground" Value="Green" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=IsOn}" Value="true">
                <Setter Property="Foreground" Value="Red" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>
<Grid>
    <StackPanel>
        <Button Click="Button_Click" Content="Change Color" />
        <TextBlock Name="textBlockColor" Text="My Foreground Color" />
    </StackPanel>

简单数据触发器不工作.为什么?

首先,您的类必须实现INotifyPropertyChanged(msdn)以通知视图您的属性已更改。

其次,必须在MainWindow构造函数中分配DataContext

示例:

public partial class MainWindow : Window, INotifyPropertyChanged
{
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = this;
    }
    private bool _isOn;
    public bool IsOn
    {
        get { return _isOn; }
        set { _isOn = value; OnPropertyChanged("IsOn"); }
    }
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        IsOn = !IsOn;          
    }
    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged(string propName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
            handler(this, new PropertyChangedEventArgs(propName));
    }
}

您的XAML代码正常。

当绑定不起作用时,将来应该使用snoop。

相关文章: