2012-06-30 38 views
7

Tôi đang ràng buộc ItemsControl to CollectionViewSource. Đây là mã số:CollectionViewSource không sắp xếp lại về thay đổi thuộc tính

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

Khi tôi bắt đầu sắp xếp - sắp xếp công trình. Khi tôi thêm mục vào ObservableCollection - nó được chèn vào vị trí thích hợp, đó là tốt. Nhưng khi tôi thay đổi tài sản mà tôi sắp xếp theo - mục này không bị "chuyển dịch" trong danh sách.

ReadyAddress.Region.RegionNumber tăng INOTifyPropertyChanged đúng cách và tôi thấy nó trong các trường bị ràng buộc, nhưng thứ tự không thay đổi. Tôi có mong đợi điều gì đó không nên xảy ra hoặc có cách nào tốt hơn để xử lý việc này?

+0

Vui lòng xem câu trả lời của tôi cho [SortDescription và làm mới thứ tự sắp xếp tự động] (http://stackoverflow.com/a/7372522/620360). – LPL

+0

Có tính năng mới trong WPF 4.5 được gọi là định hình trực tiếp để giải quyết vấn đề này nhưng bạn có thể phải sử dụng phương pháp được liên kết với LPL trong thời gian này nếu bạn không muốn gọi lại Làm mới. – Kris

+0

Tôi đã có thể sửa lỗi này bằng cách đơn giản gọi PropertyChanged trên thuộc tính hiển thị chế độ xem, cho phép làm mới chế độ xem (và xóa loại) và sau đó thêm mô tả sắp xếp. – PatFromCanada

Trả lời

5

Tất cả câu trả lời tôi tìm thấy được đề cập View.Refresh() nhưng đó không phải là giải pháp tốt cho danh sách lớn. Những gì tôi đã làm cuối cùng là Remove()Add() mục này. Sau đó, nó đã được định vị lại đúng cách mà không cần tải lại toàn bộ danh sách.

Lời cảnh cáo! Nó hoạt động cho những gì tôi làm, nhưng trong trường hợp của bạn loại bỏ đối tượng và thêm lại có thể gây ra tác dụng phụ tùy thuộc vào cách viết mã của bạn. Trong trường hợp của tôi, đó là danh sách có hiệu ứng giao diện người dùng nơi các mục mới hiển thị với quá trình chuyển đổi để làm mới sẽ hiển thị quá trình chuyển đổi trên toàn bộ danh sách, nơi xóa/thêm độc đáo hiển thị cách mục được định vị lại.

4

Bạn đã thử làm mới bộ sưu tập sưu tập của mình chưa?

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

Có, nhưng tôi không thích - nó làm mới toàn bộ khung nhìn – katit

Các vấn đề liên quan