0

我已经实现了如下的组可观察集合。如何更新可观察集合组

分组物业

private ObservableCollection<Grouping<String, Request>> _groupedList = null; 
public ObservableCollection<Grouping<String, Request>> GroupedList { 
    get { 
     return _groupedList; 
    } 
    set { 
     _groupedList = value; 
     RaisePropertyChanged(() => GroupedList); 
    } 

} 

创建列表

var list = new List<Request>(); 

var grouped = from Model in list 
         group Model by Model.Done into Group 
         select new Grouping<string, Request>(Group.Key, Group); 

GroupedList = new ObservableCollection<Grouping<string, TModel>>(grouped); 

现在我需要无需重新加载完整列表性能更新列表中的一个项目。

我这样试过,mylist.FirstOrDefault(i => i.Id== mymodel.Id);没有为我工作。

我需要挑选特定的项目,并再次编辑和更新到列表使用linq或其他东西,但我坚持在这里为组可观察收集没有有效的细节做到这一点,任何人有这个帮助的想法请。

最后我得到更新单个项目,但我需要做的,没有

GroupedList = new ObservableCollection<Grouping<string, TModel>>(grouped); 

因为每次它创建新的列表并绑定到我的view.Thats但再大的表现。 在此先感谢。

回答

1

我从你的问题中了解到,你想推送一个更新的组而不覆盖整个ObservableCollection。

为了做到这一点:

var targetGroup = GroupedList.FirstOrDefault(i => i.Id == mymodel.Id); 
var targetIndex = GroupedList.IndexOf(targetGroup); 
var modifiedGroup = ... //Do whatever you want to do 
GroupedList[targetIndex] = modifiedGroup; 

这将触发目标分组的“替换”操作。

+0

一个疑问,其中是'targerList'来自突然,还有一我不能这样做 '变种targetGroup = GroupedList.FirstOrDefault(I => i.Id == mymodel.Id);' 我试过这个,但不知何故它不适合,我不能从它得到身份证。 – Riyas

+0

最后这个作品很少修改,谢谢你的帮助@David Oliver – Riyas