在这篇文章中,我们将为您详细介绍排序ObservableCollection通过C#的内容,并且讨论关于快速排序c#的相关问题。此外,我们还会涉及一些关于.net–ObservableCollecti
在这篇文章中,我们将为您详细介绍排序ObservableCollection 通过C#的内容,并且讨论关于快速排序 c#的相关问题。此外,我们还会涉及一些关于.net – Observable Collections Collection已更改、.net 中的 ObservableCollection 有什么用?、C# ObservableCollection两个字段排序的情况、C# ObservableCollection集合排序的知识,以帮助您更全面地了解这个主题。
本文目录一览:- 排序ObservableCollection 通过C#(快速排序 c#)
- .net – Observable Collections Collection已更改
- .net 中的 ObservableCollection 有什么用?
- C# ObservableCollection两个字段排序的情况
- C# ObservableCollection集合排序
排序ObservableCollection 通过C#(快速排序 c#)
我在下面ObservableCollection<string>
。我需要 进行排序 按字母顺序这一点。
private ObservableCollection<string> _animals = new ObservableCollection<string>{ "Cat", "Dog", "Bear", "Lion", "Mouse", "Horse", "Rat", "Elephant", "Kangaroo", "Lizard", "Snake", "Frog", "Fish", "Butterfly", "Human", "Cow", "Bumble Bee"};
我试过了_animals.OrderByDescending
。但是我不知道如何正确使用它。
_animals.OrderByDescending(a => a.<what_is_here_?>);
我怎样才能做到这一点?
答案1
小编典典介绍
基本上,如果需要显示排序的集合,请考虑使用CollectionViewSource
该类:将其Source
属性分配(“绑定”)给源集合—ObservableCollection<T>
该类的实例。
这个想法是,CollectionViewSource
类提供的实例CollectionView
类。这是原始(源)集合的“投影”,但是具有应用的排序,过滤等功能。
参考文献:
- 如何:使用XAML中的视图对数据进行排序和分组。
- WPF的CollectionViewSource。
实时塑形
WPF 4.5引入了“实时成形”功能CollectionViewSource
。
参考文献:
- WPF 4.5的新功能:实时塑形。
- CollectionViewSource.IsLiveSorting属性。
- 随着数据值的变化而重新定位数据(实时整形)。
解
如果仍然需要对类的实例进行排序ObservableCollection<T>
,请按照以下步骤进行。在ObservableCollection<T>
类本身不具有排序方法。但是,可以重新创建集合以对项目进行排序:
// Animals property setter must raise "property changed" event to notify binding clients.// See INotifyPropertyChanged interface for details.Animals = new ObservableCollection<string> { "Cat", "Dog", "Bear", "Lion", "Mouse", "Horse", "Rat", "Elephant", "Kangaroo", "Lizard", "Snake", "Frog", "Fish", "Butterfly", "Human", "Cow", "Bumble Bee" };...Animals = new ObservableCollection<string>(Animals.OrderBy(i => i));
额外细节
请注意,OrderBy()
和OrderByDescending()
方法(与其他LINQ扩展方法一样) 不会修改 源集合!相反,它们
创建一个新序列 (即,实现IEnumerable<T>
接口的类的新实例)。因此,有必要重新创建集合。
.net – Observable Collections Collection已更改
ObservabelCollection<Person> personcollection... and if I change a property like: Person p = personcollection.where(e => e.FirstName == "Joey").FirstOrDefault(); if (p != null) { p.FirstName = "Joe"; }
我希望在UI中发生一些事情,但没有任何改变.
任何帮助将不胜感激.
大卫
解决方法
它并不关心它的集合中某个对象的属性是否发生变化.您需要在这些对象的属性上实现INotifyPropertyChanged接口以触发对UI的更改.
我读了here,给了我一些有用的见解.虽然它针对WPF,但大多数仍然适用,因为Silverlight本质上是WPF的一个子集.
以及这篇MSDN文章,其中指出:
In particular,if you are using OneWay or TwoWay (for example,you want your UI to update when the source properties change dynamically),you must implement a suitable property changed notification mechanism such as the INotifyPropertyChanged interface.
.net 中的 ObservableCollection 有什么用?
.net 中的 ObservableCollection 有什么用?
C# ObservableCollection两个字段排序的情况
相对于System.Linq的OrderBy及OrderByDescending方法,调用后产生IOrderedEnumberable对象,这个对象为排序后的返回值,但原对象未发生变化。
试想,有这种需求,ObservableCollection调用排序方法后,此对象也跟着排序,怎么做呢?只能自己写个扩展方法了,方法内使用的冒泡排序算法,非常简单,当然使用是更简单、方便了。
注意:将方法写为扩展方法更方便:
class Student
{
int id;
string name;
}
ObservableCollection listDatas=new ObservableCollection<Student>();
listData .Add(new Student(){id=2,name="xiaoming"};
listData.Add(new Student(){id=1,name="李华"};
listData.Add(new Student(){id=3,name="张度"};
listDatas.OrderBy(cu=>cu.id,true);//按ID升序排序
listDatas.OrderBy(cu=>cu.id,false);//按ID降序排序
listDatas.OrderBy(cu=>cu.name,false);//按名称升序排序
listDatas..ThenBy(x => x.name)//按名称升序排序 (只有ID相同的情况下,按name升序排序)
C# ObservableCollection集合排序
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BYH371256/article/details/83346807
注意:ObservableCollection集合 直接使用OrderBy 等函数排序,有问题的,排序不改变,可以转成List在进行排序
命名空间:System.Collections.ObjectModle
在WPF中,绑定列表List,数据更新后不会通知界面更新,要使用ObservableCollection集合,当数据发生改变就通知界面改变;
解决方法一:List列表转为ObservableCollection集合
private ObservableCollection<BaseSignalViewModel> children = new ObservableCollection<BaseSignalViewModel>();
public ObservableCollection<BaseSignalViewModel> Children
{
get { return children; }
set
{
children = value;
NotifyOfPropertyChange(() => Children);
}
}
List<BaseSignalViewModel> listChild = CurrentSignal.Children.ToList();
listChild.Sort(delegate(BaseSignalViewModel p1, BaseSignalViewModel p2) { return Comparer<string>.Default.Compare(p1.Index.ToString(), p2.Index.ToString()); });
//List列表转为ObservableCollection集合
CurrentSignal.Children = new ObservableCollection<BaseSignalViewModel>(listChild);
---------------------
作者:Kaivin.bao
来源:CSDN
原文:https://blog.csdn.net/byh371256/article/details/83346807
版权声明:本文为博主原创文章,转载请附上博文链接!
关于排序ObservableCollection 通过C#和快速排序 c#的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于.net – Observable Collections Collection已更改、.net 中的 ObservableCollection 有什么用?、C# ObservableCollection两个字段排序的情况、C# ObservableCollection集合排序的相关信息,请在本站寻找。
本文标签: