嘗試使用LINQ方法:
Companies=new ObservableCollection<T>(Companies.OrderBy(i=>i));
請注意藏品的順序OrderBy()
方法調用之後不會被修改。你應該說:Companies=Companies<T>(Companies.OrderBy(i=>i));
例如:
排序按字母順序排列。你應該明確說使用lambda表達式應該用什麼屬性(FirstName
在我的例子)來排序:
你的模型:
public class Person
{
public int IdPerson { get; set; }
public string FirstName { get; set; }
}
我建議你使用全屬性實現:
private ObservableCollection<Person> persons=new ObservableCollection<Person>();
public ObservableCollection<Person> Persons
{
get { return persons; }
set { persons = value;
persons = new ObservableCollection<Person>(persons.OrderBy(x => x.Name));
OnPropertyChanged("Persons");
}
}
每當您添加新項目時,您的收藏將被reorde紅色(在我看來,這是不好的做法):
Persons.Add(new Person() { IdPerson=1, FirstName="Bill"});
Persons.Add(new Person() { IdPerson = 2, FirstName = "Jon" });
Persons.Add(new Person() { IdPerson = 3, FirstName = "Joseph" });
Persons.Add(new Person() { IdPerson = 4, FirstName = "Ben" });
Persons.Add(new Person() { IdPerson = 5, FirstName = "Magnus" });
或者你可以排序的集合,而該排序集合本身的看法。在我看來,最好是:
<yourView.Resources>
<CollectionViewSource x:Key="ItemListViewSource" Source="{Binding Persons}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="FirstName" />
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</yourView.Resources>
也許那些「開頭的公司與'O'「,實際上是零? –