DataTrigger不会重新评估

时间:2014-06-11 19:07:11

标签: c# wpf datatrigger

我有一个ListBox,我想根据ListBox中前一个ListBoxItem的索引更改每个ListBoxItem的外观。

为了做到这一点,我创建了一个CustomListBoxItem,它继承自ListBoxItem并为它设置了一个Style。

Setters.Add(new Setter(ListBoxItem.ContentTemplateProperty, new CustomListBoxItemContentTemplate());

在继承自DataTemplate的CustomListBoxItemContentTemplate类的构造函数中,我有一个DataTrigger,如下所示:

DataTrigger dt = new DataTrigger();
        dt.Binding = new Binding()
        {
            RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor, typeof(CustomListBoxItem), 1),
            Mode = BindingMode.OneWay,
            UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
            Converter = new CustomConverter()
        };
        dt.Value = true;
        Triggers.Add(dt);

最后在CustomConverter类的Convert方法中,我实现了IValueConverter,如下所示:

        var item = value as CustomBoxItem;

        if (item == null)
            return false;

        /// I get the ItemsControl here
        ItemsControl ic = ItemsControl.ItemsControlFromItemContainer(item);

        /// and the index of the CustomListBoxItem
        int index = ic.ItemContainerGenerator.IndexFromContainer(item);

        if (index == 0) 
            return true;

        var previousItem = ic.ItemContainerGenerator.ContainerFromIndex(index - 1) as CustomListBoxItem;

        /// ....

我应该说当ItemsSource绑定到源集合时,每件事情都完美无缺,但是当我向CustomListBox添加或删除项目时,DataTrigger不会重新评估整个项目。它仅适用于添加的项目。

我真的不知道问题是什么,或者说我的做法不是很好。

感谢任何帮助。非常感谢。

0 个答案:

没有答案