我的ObservableCollection
包含Companies
。我想在Company
添加ObservableCollection
,我这样做;
Companies.Add(newCompany);
CompanyICollectionView.Refresh();
这会将Company
添加到ObservableCollection
,但会将其添加到DataGrid
的最底部。我希望Company
按字母顺序添加到ObservableCollection
中的正确位置。我在添加到SortDescription
;
Companies
companyDataGrid.Items.SortDescriptions.Add(new SortDescription("CompanyName", ListSortDirection.Descending));
然而,这非常缓慢,并且还导致了一些奇怪的排序(以{O'开头的Companies
位于顶部)。如何添加Company
以便按字母顺序自动列出?
答案 0 :(得分:0)
尝试使用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");
}
}
每次添加新项目时,您的收藏品都会重新排序(在我看来,这不是一个好办法):
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>
答案 1 :(得分:0)
@Cbreeze 这很简单,因为@Steup已经在上面分享了,只是为了添加,
// ascending
collection = new ObservableCollection<string>(collection.OrderBy(a => a));
// descending
collection = new ObservableCollection<string>(collection.OrderByDescending(a => a));
如果你想要别的东西让我们知道会尽力帮助,但请明确你的问题
@Stepup你是对的我不知道为什么有人贬低你