2012-06-30 28 views
7

ItemsControl to CollectionViewSource öğesini bağlıyorum. İşte kod: Çalışmaya başladığımda başlangıçta bağladığımda: kodları:CollectionViewSource, özellik değişikliğini yeniden sıralamaz

this.Trucks = new ObservableCollection<Truck>(); 
      foreach (var truck in DataRepository.Trucks.Where(t => t.ReadyDate.Date.Equals(this.Date))) 
      { 
       this.Trucks.Add(truck); 
      } 

      this.TrucksSource = new CollectionViewSource { Source = this.Trucks }; 
      this.TrucksSource.SortDescriptions.Add(new SortDescription("ReadyAddress.Region.RegionNumber", ListSortDirection.Ascending)); 
      this.TrucksSource.SortDescriptions.Add(new SortDescription("TruckId", ListSortDirection.Ascending)); 

ObservableCollection öğeye eklediğimde - uygun noktaya eklenir, bu iyi. Ama sıraladığım özelliği değiştirdiğimde - bu öğe bir listede "kaydırılmıyor".

ReadyAddress.Region.RegionNumber düzgün şekilde INotifyPropertyChanged'ı yükseltir ve ilişkili alanlarda görüyorum ancak sipariş değişmiyor. Olmaması gereken bir şey mi beklemeliyim yoksa bunun üstesinden gelmenin daha iyi bir yolu var mı?

+0

Lütfen [SortDescription ve otomatik sıralanmış sipariş yenileme] için yanıtıma bakın (http://stackoverflow.com/a/7372522/620360). – LPL

+0

WPF 4.5'te, bu sorunu çözen canlı şekillendirme olarak adlandırılan yeni bir özellik var ancak Yenile'yi aramak istemiyorsanız, LPL'ye bağlı yöntemi kullanmak zorunda kalabilirsiniz. – Kris

+0

Bu özelliği, yalnızca görüntüyü açığa çıkaran, görünümün yenilenmesini (ve sıralamayı temizleyen) ve ardından sıralama açıklamalarını ekleyen PropertyChanged'i çağırarak çözebildim. – PatFromCanada

cevap

5

tüm cevaplar View.Refresh() sözü ancak bu büyük listeleri için çok iyi bir çözüm değil. Ne yaptım bitti Remove() ve Add() bu öğe oldu. Sonra tüm listeyi yeniden yüklemeden düzgün bir şekilde yeniden konumlandırıldı.

Dikkatli olun! Yaptığım şey için çalışıyor, fakat sizin durumunuzda, nesneyi kaldırmak ve yeniden eklemek kodunuzun nasıl yazıldığına bağlı olarak yan etkiye neden olabilir. Benim durumumda, yeni öğelerin geçişle birlikte gösterdiği UI efektli bir liste bu kadar ferahlatıcı, öğenin nasıl yeniden konumlandırılacağını güzel bir şekilde kaldırmanın/eklediğin tüm listede geçişi gösterecektir.

4

Koleksiyonviewsource'unuzu yenilemeyi denediniz mi? Bulduğum

this.TruckSource.View.Refresh(); 
+3

Evet, ama beğenmedim - tüm görünümü yeniliyor – katit

İlgili konular