2013-09-27 100 views
0

我遇到了observablecollection問題,因爲它沒有更新我的視圖。它正在獲取數據,我已經檢查過它。我也讓事件收集改變了事件,但它也沒有被調用。我不知道爲什麼這裏發生的是我的代碼..ObservableCollection未更新數據

public async Task GetActivityStudentCollection() 
    { 

     StudentActivityCollection = await ViewModelLocator.ActivityViewModel.GetActivity(0, 8, 0, 20); 

     StudentActivityCollection.CollectionChanged += StudentActivityCollection_CollectionChanged; 
    //  RaisePropertyChanged("StudentActivityCollection"); 
    } 

    void StudentActivityCollection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) 
    { 
     // throw new NotImplementedException(); 
    } 

我已經這樣綁定這個集合與列表視圖。

ActivityListViewSource.Source = ViewModelLocator.DashBoard.StudentActivityCollection; 

ViewModelLocator.ActivityViewModel.GetActivity(0,8,0,20);方法正在返回一個集合,這是我綁定(不工作),但如果我將集合直接綁定到將返回它的集合工作..means如果我像這樣綁定(它的工作)..

ActivityListViewSource.Source = ViewModelLocator.ActivityViewModel.ActivityCollection; 

我很抱歉我的bad english.please試圖理解這個問題。 是因爲異步方法還是什麼。任何類型的幫助表示讚賞..

+0

你有沒有試過通過「ViewModelLocator.ActivityViewModel.ActivityCollection」循環和增加每個對象的「StudentActivityCollection」? – samar

+0

沒有薩馬爾其實我已經得到了整個集合,只是將它複製到綁定集合..因爲如果假設如果集合太大,那麼它是不可行的。 – loop

+0

只是爲了測試目的而嘗試它。看看這是否工作。我們稍後可以找出更好的方法。 – samar

回答

1

嘗試是這樣的

public async Task GetActivityStudentCollection() 
{ 

    var studentActivityColl = await ViewModelLocator.ActivityViewModel.GetActivity(0, 8, 0, 20); 

    foreach(var studentAct in studentActivityColl) 
     StudentActivityCollection.Add(studentAct); 

    StudentActivityCollection.CollectionChanged += StudentActivityCollection_CollectionChanged; 
//  RaisePropertyChanged("StudentActivityCollection"); 
} 
+0

薩馬請你做得出來做不增加項目一個一個地 – loop

+1

我不知道這是否會工作,但嘗試和執行INotifyPropertyChanged接口,其中包含「StudentActivityCollection」的模式,並調用內部的一套「StudentActivityCollection的PropertyChanged事件」。然後嘗試你的原始代碼。這裏給出一個完整的實現。試試吧,讓我知道它是否有效。 http://stackoverflow.com/questions/14783750/observablecollection-loses-binding-when-i-new-it – samar

0

你不應該從該方法返回一個新的集合。你應該通過一個實例。

ObservableCollection studentActivityCollection = new ObservableCollection(); 

studentActivityCollection.CollectionChanged += StudentActivityCollection_CollectionChanged; 

await ViewModelLocator.ActivityViewModel.GetActivity(studentActivityCollection, 0, 8, 0, 20); 

因爲所有事件都是在註冊事件之前觸發的。

+0

JEROEN它不是觸發此event..actually它沒有更新數據的問題。意味着它只是一個檢查,我已經申請,順便說一句,它不工作..感謝您的努力...請嘗試瞭解問題 – loop

+0

我認爲'StudentActivityCollection = await ViewModelLocator.ActivityViewModel.GetActivity(0,8,0, 20);'是覆蓋舊的集合。它應該添加項目,而不是返回一個新的集合。 –