1

我已经实现了如下所示的组可观察集合。

分组属性

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);

因为每次它创建新列表并绑定到我的视图中。不过,这又是一次大的表现。提前致谢。

4

1 回答 1

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;

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

于 2017-09-06T16:49:26.510 回答