我有以下代码来重新订购ObservableCollection<T>集合:
list = new ObservableCollection<SomeType>( list.OrderBy( c=>c.Ordinal ) );
Run Code Online (Sandbox Code Playgroud)
这段代码有效,但我不喜欢涉及"新"的事实.有没有办法可以在ObservableCollection<T>不创建新集合的情况下更改集合的内部元素顺序?
谢谢,
spe*_*der 10
鉴于这OrderBy也是一个数组的新闻,以匹配您的集合的大小,以及其他几个对象,您有两个选择:
别担心,新东西并不是那么可怕.Linq一直都这么做.除非它是一个瓶颈,否则一切都很好.除非有令人信服的证据证明就地排序会真正加速节目,否则这里没有问题.
bkk*_*bkk 10
为Observable集合实现自定义排序扩展方法
public static class ObservableCollection
{
public static void Sort<TSource, TKey>(this ObservableCollection<TSource> source, Func<TSource, TKey> keySelector)
{
List<TSource> sortedList = source.OrderBy(keySelector).ToList();
source.Clear();
foreach (var sortedItem in sortedList)
{
source.Add(sortedItem);
}
}
}
Run Code Online (Sandbox Code Playgroud)
上面的回答是受到Jaider先生对这个问题的回答的启发
我的答案受到了bkk的启发
public static class ObservableCollection
{
public static void Sort<TSource, TKey>(this ObservableCollection<TSource> source, Func<TSource, TKey> keySelector, bool isAZ)
{
if (isAZ)
{
List<TSource> sortedList = source.OrderBy(keySelector).ToList();
source.Clear();
foreach (var sortedItem in sortedList)
{
source.Add(sortedItem);
}
}
else
{
List<TSource> sortedList = source.OrderByDescending(keySelector).ToList();
source.Clear();
foreach (var sortedItem in sortedList)
{
source.Add(sortedItem);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法
_someObservableCollection.Sort(x => x.Number, false); // Where number is an simple property (non-onject)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20415 次 |
| 最近记录: |