2011-11-05 60 views
2

我将BindingList的两种方式绑定到列表框。绑定列表包含许多图像,如果将项目添加到绑定列表或从绑定列表中删除项目,这些图像显然只会更新列表框。我怎样才能让绑定列表在项目被修改时也引发listchanged事件?绑定列表和UI控件,在编辑时不更新

编辑:我发现我遇到的问题是一个对象的属性没有被改变,而是基础对象。

BindingList<ImageSource>(); 

这不会工作,但如果我这样做:

BindingList<Image>(); 

然后设置Image.Source绑定路径,这将正确地更新,这是因为图像的性质发生了变化,但在第一个例子中,只有列表中的直接项目发生了变化。那么我怎样才能获得与第二个例子相同的行为?

FINAL EDIT:看来,使用ObservableCollection而不是BindingList修复了这个问题。我的印象是,他们在收集收集的变化时是相同的。下面的全部答案

回答

1

BindingListObservableCollection的不同之处在于,BindingList不会通知其直接项目发生更改(除了将项目添加到集合中或从集合中删除项目时)。但ObservableCollection实现INotifyCollectionChanged和INotifyPropertyChanged接口。这意味着对直接将ObservableCollection的项目进行的任何更改都会报告给UI。

如果您使用绑定来指示项目,并且需要更新项目而不是这些项目的属性,那么您似乎必须使用ObservableCollection。另一个解决方案是从BindingList派生并实现INotifyCollectionChanged。

我不是专家,但这是我在过去一小时内收集的,如果任何人有任何补充或更正,请让我知道。

2

该列表确实会引发该事件,但前提条件是通过INotifyPropertyChanged提供了适当的通知。

+0

我明白这一点,但它似乎没有按预期工作。实际的绑定在数据模板中是这样的:''据我所知ImageSource有一个依赖项属性,有一个OnPropertyChanged方法,为什么它不工作? – Monokh

+0

@ gummy24:'Image.Source'属性不是问题,在这种情况下'TheImage'类型需要通知更改。 –