2012-03-02 22 views
13

Tôi đã hỏi câu hỏi này trên các diễn đàn MSDN cũng ... http://social.msdn.microsoft.com/Forums/en/wpf/thread/4493988a-9bd8-48fe-aff0-348502136a80Tại sao KHÔNG BindingList trong WPF

Tôi cần phải biết rằng tại sao Microsoft gợi ý rằng BindingList không phải là đúng hỗ trợ trong WPF ...

Điều gì không hoạt động với BindingList trong WPF? Tôi thấy nó khá hữu dụng. Cho đến nay cá nhân tôi chưa tìm thấy BindingList chậm hơn hoặc có nhiều tải hơn trên bộ nhớ.

Thêm WPF ItemsControls, ItemsTemplates, Styles, Hierarchies công việc tuyệt vời với BindingList quá. Họ đều có thể quan sát ngang nhau.

Là một nhà phát triển WPF Hardcore bản thân mình và một người hâm mộ ObservableCollection, đức tin của tôi là nhận được rung động bởi một được-có-làm-đó BindingList ....

Tại sao tôi nên sử dụng ObservableCollection trên BindingList? (giữ sang một bên INotifyPropertyChanged mà cả hai phải thực hiện những thay đổi sở hữu item)

+0

có thể trùng lặp của http://stackoverflow.com/questions/4284663/difference-between-observablecollection-and-bindinglist –

+2

@Leom, chủ đề đó cũng doesnt trả lời câu hỏi như trong những gì là sai với 'BindingList'? –

+2

ObservableCollection đã thông báo khi một mục được thêm vào hoặc bị xóa. Bạn không phải triển khai INotifyPropertyChanged. – dcarneiro

Trả lời

16

này có thể quan tâm:

http://www.themissingdocs.net/wordpress/?p=465

đoạn quan trọng nhất:

Nhưng việc thực hiện không quy mô , nó chậm, nó hoạt động khủng khiếp với các danh sách lớn hơn. Nếu loại phần tử của bạn hỗ trợ INotifyPropertyChanged, mỗi khi một trong những yếu tố này làm tăng sự kiện thay đổi thuộc tính, toàn bộ danh sách sẽ được đưa ra để làm việc chỉ mục trong danh sách mục đã gây sự kiện! Tôi đã bị sốc khi lần đầu tiên tôi nhận ra điều này. Bạn thấy BindingList thực sự chỉ là một wrapper khá mỏng so với Collection, vì vậy không có siêu dữ liệu nào liên kết với mỗi mục, tất cả sự ràng buộc của sự kiện PropertyChanged của phần tử được chuyển đến một trình xử lý duy nhất, và tất cả nó được đưa ra là nguồn và tên của thuộc tính đã thay đổi, vì vậy không có cách nào để bao gồm tham số NewIndex trong ListChangedEventArgs mà không thực hiện tìm kiếm. (Theo mặc định, tìm kiếm này thậm chí còn sử dụng trình so sánh đối tượng mặc định, vì vậy nếu bạn có hai đối tượng khác nhau nhưng đôi khi bằng nhau trong danh sách của mình, hãy tận hưởng kết quả…)

Một lưu ý khác - AddNew, tính năng khác mà BindingList có Bộ sưu tập không - cũng không mở rộng quy mô. Nó phải sử dụng IndexOf để tìm ra nơi trong danh sách mục mới được thêm vào kết thúc trong trường hợp nó cần phải hủy bỏ add, bởi vì nó hỗ trợ tự động phân loại trong các kiểu có nguồn gốc. (BindingList không hỗ trợ tự động sắp xếp bản thân ...)

+0

Tuyệt vời! Thx một tấn! Đây là những gì tôi muốn biết ... các thông báo thay đổi mục thác!Đức tin của tôi được lấy lại. :-) –

+12

Tiêu đề cho mục được liên kết là "BindingList không quy mô". Thú vị, nhưng đọc kỹ nó - chỉ trong phần bình luận bạn mới phát hiện ra rằng ứng dụng của tác giả là bất thường ở chỗ anh ấy muốn hiển thị số lượng cập nhật rất lớn trong thời gian thực trên giao diện người dùng của mình. Không có khả năng là một vấn đề trong một kịch bản giao diện người dùng phổ biến hơn. –

+1

Vì vậy, an toàn của nó để nói Danh sách ràng buộc hoạt động tốt trong 99% các ứng dụng wpf – MegaMind

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