2012-08-06 106 views
0

我已經對這個問題做了一些研究,但是我找不到解決方法。ListBox不刷新ObservableCollection

Here's問題:

我有我的自定義類ListedNote的一個ObservableCollection。首先ListBox顯示數據,但有些數據是異步加載的,不會被更新。 (例如,用戶圖像)

<ScrollViewer VerticalScrollBarVisibility="Auto"> 
     <ListBox ItemsSource="{Binding Notes, UpdateSourceTrigger=PropertyChanged}" x:Name="Content" ItemTemplate="{StaticResource ListBoxCardFBLikeTemplate}" 
       HorizontalContentAlignment="Stretch"> 

     </ListBox> 
    </ScrollViewer> 

視圖模型

.... 
private ObservableCollection<ListedNote> notes; 

public ObservableCollection<ListedNote> Notes 
     { 
      get { return notes; } 
      set { notes = value; RaisePropertyChanged(() => this.Notes); } 
     } 
private void LoadAttachmentsAsync(ListedNote note) 
     { 
      Async.Call(() => this.ServiceConnector.RetrieveAnnouncementAttachment(note.IdValue), 
       mm => 
       { 
        if (mm != null) 
        { 
         if (mm.MultimediaType.IsPicture) 
          note.AttachedPicture = mm; 
         else 
          note.AttachedFile = mm; 

         note.AttachmentData = new List<byte>(mm.Data); 

         var index = this.Notes.IndexOf(note); 
         if (index >= 0) 
          this.Notes[index] = note; 


        } 
       }); 
     } 

任何想法?

回答

4

ObservableCollection只會在集合內容發生變化時通知用戶界面:即,當添加或刪除ListedNote時。如果集合中已有ListedNote的屬性發生更改,它將不會通知UI。

ListedNote您的ListedNote類需要實現INotifyPropertyChanged接口,以便UI知道某個屬性在個別註釋中發生了變化。

+0

ObservableCollection是否不會像我的viewModel中那樣通知重載? – Cr3at0rX 2012-08-06 09:37:50

+1

ObservableCollection'只會在集合中的內容發生變化時纔會通知 - 即,當您添加或刪除某個項目時。更改集合中項目的屬性*不會更改集合中的項目,因此「ObservableCollection」不會幫助您。當* its *屬性更改時,您需要使用「ListedNote」類來通知UI。 – 2012-08-06 09:40:23