2013-09-27 54 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);'是覆盖旧的集合。它应该添加项目,而不是返回一个新的集合。 –