如何按ID对ObservableCollection<CariHesaplarPickerItems>排序?
对ObservableCollection按ID排序的实现方法
方法一:先排序数据源再填充集合
你可以在接口返回数据反序列化后,先对原始数据列表按ID排序,再将排序后的结果添加到ObservableCollection中,这种方式直接高效:
修改你的GetAllData方法,在处理数据前先排序:
private async Task GetAllData() { var resCariGrup = await client.ExecuteAsync(request, Method.Post); var dataCariGrup = JsonConvert.DeserializeObject<RootCariGrup>(resCariGrup.Content); _pickerlistItemsSource.Clear(); pickerListItems.Clear(); pickerListItems.Add("Hepsi"); // 对返回的data列表按ID升序排序 var sortedItems = dataCariGrup.data.OrderBy(item => item.id).ToList(); // 遍历排序后的列表填充集合 foreach (var item in sortedItems) { _pickerlistItemsSource.Add(new CariHesaplarPickerItems { ID = item.id, grupAd = item.grup, kullaniciAd = item.kullaniciAdi, subeAd = item.subeAdi }); // 同步更新pickerListItems(根据你的业务需求调整) pickerListItems.Add(item.grup); } pickerCariListe.ItemsSource = pickerListItems; ... }
方法二:给ObservableCollection添加排序扩展方法
如果需要对已填充好的ObservableCollection直接排序,可以通过扩展方法实现,方便后续复用:
先定义扩展类:
public static class ObservableCollectionExtensions { public static void Sort<T>(this ObservableCollection<T> collection, Comparison<T> comparison) { var sortedList = collection.OrderBy(item => item, new Comparer<T>(comparison)).ToList(); collection.Clear(); foreach (var item in sortedList) { collection.Add(item); } } private class Comparer<T> : IComparer<T> { private readonly Comparison<T> _comparison; public Comparer(Comparison<T> comparison) { _comparison = comparison; } public int Compare(T x, T y) { return _comparison(x, y); } } }
在需要排序的时候直接调用:
// 按ID升序排序 _pickerlistItemsSource.Sort((x, y) => x.ID.CompareTo(y.ID)); // 若要降序排序,只需调换比较顺序 // _pickerlistItemsSource.Sort((x, y) => y.ID.CompareTo(x.ID));
说明
ObservableCollection本身没有内置的排序方法,上述两种方法分别对应提前排序数据源和扩展集合功能两种场景,你可以根据业务需求选择合适的方式。
内容的提问来源于stack exchange,提问作者BySuspect
相关产品推荐
相关产品推荐

