WPF DataTrigger只工作1次

时间:2014-07-20 16:56:26

标签: c# wpf datatrigger

我正在尝试WPF,并且我有一个ObservableCollection连接到ListView的应用程序。它完美地添加了物品,一切都在一起。它从实时源中获取数据,因此项目值正在更新并且正在添加行。但是现在我希望突出显示最近的行,更改文本,以显示正在更改此特定行。因此,我设置了一个数据触发器,并为名为DataType的{​​{1}}中的ObservableCollection添加了一个值。如果为true,则将文本设置为红色,否则文本为黑色。

当我运行此代码时,列表项会变为红色,然后再也不会改回来,我已经尝试了所有内容,而且它正在让我失望。我已经检查了调试器,甚至当值为RecentlyChanged时(我正在使用字符串noyes,因为我想尝试各种数据类型)它保持红色。数据触发器的代码如下:

- 编辑:在我尝试使用的第二个数据触发器中添加之前无效。

no

1 个答案:

答案 0 :(得分:4)

问题是ObservableCollection仅报告对集合本身的更改,换句话说,它会在添加或删除项目时触发CollectionChanged事件,但不会在这些项目的属性发生更改时触发。为了实现所需的结果 - 在项目属性更改时更新数据触发器 - 项目本身必须实现INotifyPropertyChanged接口并在设置了所需属性时触发PropertyChanged事件。

在这种情况下,您可以使用以下内容:

using System.ComponentModel;

public class ListViewItem : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string name)
    {
        var propChanged = PropertyChanged;
        if(propChanged != null)
        {
            propChanged(this, new PropertyChangedEventArgs(name));
        }
    }

    private string recentlyChanged = "yes"; // Recently changed on creation
    public string RecentlyChanged
    {
        get { return recentlyChanged; }
        set {
            recentlyChanged = value;
            OnPropertyChanged("RecentlyChanged");
        }
    }

    // ... define the rest of the class as usual

}

WPF魔术应该照顾其余部分。