ObservableCollection
对于 Silverlight 和 WPF 应用程序,我有一个包含作为依赖项属性的自定义控件。该控件的一个元素 Border 需要根据ObservableCollection
.
例如,假设集合是动物、蔬菜和矿物质,并称为ObjectList
. 如果至少有一只动物,我希望边框是红色的;如果没有动物,但至少有一种蔬菜,它是绿色的;否则该集合只有矿物,因此将显示为蓝色。
我创建了一个可以获取集合并确定颜色的转换器,因此具有如下绑定:
<Border Background="{Binding ObjectList,
RelativeSource={RelativeSource Self},
Converter={StaticResource MyColorConverter}}" />
挑战在于,随着项目的添加/删除,ObjectList
我需要触发对背景颜色的重新评估;然而,ObjectList
它本身并没有改变。我想我有三个选择,但不确定哪个可能是最佳实践:
每次添加或删除对象时创建一个新集合。这似乎很严厉,但会导致
ObjectList
被更改并因此触发后台更新。在回调中调用
UpdateTarget
background 属性。由于不适用于 Silverlight,我只是删除并重新添加绑定 - 再次有点笨拙。CollectionChanged
ObjectList
UpdateTarget
在我的
INotifyPropertyChanged
自定义控件PropertyChanged
上实现并调用ObjectList
CollectionChanged
我最喜欢 3,但事实上我有一个也实现 INPC 的 DependencyObject 似乎很奇怪。是吗?有没有更优雅的方法?