按字母顺序添加到ObservableCollection

时间:2016-04-06 08:37:56

标签: c# wpf datagrid

我的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以便按字母顺序自动列出?

2 个答案:

答案 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你是对的我不知道为什么有人贬低你

相关问题