2016-04-06 15 views
1

Companies ürününü içeren ObservableCollection ürünüm var. Company'u ObservableCollection'a eklemek istiyorum ve bunu seviyorum;Gözlemlenebilir Dizilime Ekleme Alfabetik Olarak

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

Bu ancak DataGrid en altına ekler, ObservableCollection için Company eklemek gelmez. Company'un alfabetik olarak ObservableCollection'da doğru konuma eklenmesini istiyorum. Companies'a ekledikten sonra SortDescription'u kullanmayı denedim;

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

ancak bu çok yavaş ve ayrıca ('O' ile başlayan Companies üstünde idi) bazı garip sipariş sonuçlandı. Company'a nasıl ekleyebilirim ki otomatik olarak alfabetik olarak listelenir?

Companies=new ObservableCollection<T>(Companies.OrderBy(i=>i)); 

koleksiyonunda öğelerin sırası OrderBy() yöntem çağrısından sonra değiştirilmez lütfen unutmayın:

+1

downvoted neden ben bilmiyorum doğru @Stepup Sorunuzun

için net lütfen 'O' ile, gerçek bir sıfır vardı? –

cevap

0

linq yöntemi kullanmayı deneyin. Sen demeliyim: Örneğin Companies=Companies<T>(Companies.OrderBy(i=>i));

:

alfabetik sıralama. Sen açıkça sıralamak için kullanılmalıdır (bizim örneğimizde FirstName) ne özelliği lambda ifade kullanarak demeliyim:

Modeliniz:

public class Person 
{ 
    public int IdPerson { get; set; } 
    public string FirstName { get; set; } 
} 

Ben tam mülkiyet uygulamasını kullanmak öneririz:

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

}

Her yeni öğe eklediğinizde, koleksiyonunuz yeniden düzenlenir. kırmızı (Bence değil mi iyi yaklaşım): Eğer koleksiyon kendisi sıralama ziyade koleksiyon görünümünü sıralayabilirsiniz

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

veya. İstersen @Steup zaten sadece eklemek için yukarıdaki paylaşılan gibi basit sessiz

<yourView.Resources> 
    <CollectionViewSource x:Key="ItemListViewSource" Source="{Binding Persons}"> 
     <CollectionViewSource.SortDescriptions> 
      <scm:SortDescription PropertyName="FirstName" /> 
     </CollectionViewSource.SortDescriptions> 
    </CollectionViewSource> 
</yourView.Resources> 
+0

@downvoter, neden reddediyorsunuz? Nedeni bilmek gerçekten ilginç. :) – StepUp

+0

Reddetmedim, ama cevabındaki kod geçersiz, muhtemelen bir sebep. Şirketler = Şirketler (Companies.OrderBy (i => i)); 'anlamsızdır. – Shazi

+0

@Shazi oops, test etmediğim için üzgünüm. Şimdi test ettim ve çalışıyor. – StepUp

0

@Cbreeze ,

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

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

başka bir şey bize çalışacağız bildirin: Bence daha iyi olur yardım ancak bazı kimse seni "başlamak Belki bu şirketlerin

İlgili konular