希望有人可以帮我解决这个问题。我正在创建一个Silverlight应用程序,用于编辑图像。用户有一个项目,其中包含包含元素的图层。 (元素是文本和图像元素)。
我有一个代表项目的课程。它包含ObservableCollection<Layer>
,每个图层都有ObservableCollection<Element>
。元素是一个抽象类。有一个继承自Element的TextElement和ImageElement类。
我的问题是当我更改集合中的元素时,UI永远不会更新。我在我的所有属性上使用INotifyPropertyChanged,我正在收集CollectionChanged但仍然没有去。 ObservableCollection<Element>
的CollectionChanged事件永远不会受到其元素之一更新的影响。
这是我原来的代码:
void Elements_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
this.NotifyChange("Elements");
}
如果有人可以提供帮助,我将非常感激。
答案 0 :(得分:0)
ObservableCollection<>
会发布CollectionChanged
,但当集合中的项目发生更改时,它不会发布CollectionChanged
。
为了解决这个问题,您可以订阅INotifyPropertyChanged
事件,然后订阅CollectionChanged
处理程序中添加的elementCollection.CollectionChanged += (s, a) =>
{
foreach (Element element in a.NewItems)
element.PropertyChanged += ElementChanged;
};
个元素:
ElementChanged
然后,您可以在{{1}}方法中更新用户界面。