2016-04-06 46 views
1

我有一個ObservableCollection,其中包含Companies。我想爲ObservableCollection添加一個Company,我這樣做;按字母順序添加到ObservableCollection

Companies.Add(newCompany); 
CompanyICollectionView.Refresh(); 

但這將Company添加到ObservableCollection,但它也增加了DataGrid的最底部。我想按字母順序將Company添加到ObservableCollection的正確位置。我在加入Companies後試圖使用SortDescription;

companyDataGrid.Items.SortDescriptions.Add(new SortDescription("CompanyName", ListSortDirection.Descending)); 

然而,這是非常緩慢,也導致了一些奇怪的排序(Companies與「O」開始是在頂部)。我如何添加Company以便它自動按字母順序列出?

+1

也許那些「開頭的公司與'O'「,實際上是零? –

回答

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"); 
     } 

}

每當您添加新項目時,您的收藏將被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> 
+0

@downvoter,你爲什麼downvote?知道原因真的很有趣。 :) – StepUp

+0

我沒有downvote,但你的答案中的代碼是無效的,這可能是一個原因。 '公司=公司(Companies.OrderBy(i => i));'沒有任何意義。 – Shazi

+0

@Shazi哎呀,對不起,我沒有測試過。現在我已經測試,它的工作原理。 – StepUp

0

@Cbreeze 作爲@Steup以上只是加上已經共享這是安靜簡單,

// ascending 
collection = new ObservableCollection<string>(collection.OrderBy(a => a)); 

// descending 
collection = new ObservableCollection<string>(collection.OrderByDescending(a => a)); 

,如果你想要別的東西讓我們知道會嘗試幫助,但請明白你的問題

@Stepup你是正確的,我不知道爲什麼有人downvoted你