2011-11-05 58 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'類型需要通知更改。 –