2009-02-06 31 views
5

Tôi đang phân lớp kiểm soát ListBox tiêu chuẩn. Tôi được thông báo về những thay đổi đối với bất kỳ yếu tố nào được thêm vào danh sách. Nhiệm vụ là cập nhật văn bản được hiển thị bởi ListBox cho phần tử thay đổi.C# Force ListBox để cập nhật các phần tử

Tôi biết rằng tôi chỉ có thể xóa phần tử đã thay đổi và thêm lại thành phần tử, nhưng điều này có vẻ không thích hợp hơn vì những lý do rõ ràng.

+0

bản sao có thể có của [Làm cách nào để làm cho ListBox làm mới văn bản mục của nó?] (Http://stackoverflow.com/questions/61421/how-do-i-make-a-listbox-refresh-its-item- văn bản) – Timwi

+0

Không chỉ là một bản sao của câu hỏi được đề cập ở trên - câu hỏi khác cũng có câu trả lời tốt hơn nhiều. – Timwi

Trả lời

15

Thật không may, ràng buộc dữ liệu trong ListView không hỗ trợ sự kiện thông báo thay đổi thông thường (mục) (FooChanged/INotifyPropertyChanged). Tuy nhiên, nếu bạn biết về thay đổi, bạn có thể lấy danh sách để tự ràng buộc lại. Vì bạn đang subclassing, bạn có thể gọi:

this.RefreshItems(); 

hoặc cho một mục duy nhất:

this.RefreshItem(index); 

Nếu không, vì đây là không được công khai, bạn có thể mô phỏng nó bằng cách thay đổi DisplayMember:

Một chút hacky, có thể, nhưng nó hoạt động, và duy trì lựa chọn hiện tại vv (không giống như thanh toán bù trừ DataSource).

+0

Cảm ơn người đàn ông. Tôi trông giống như 'một chút hacky' phương pháp làm việc tốt hơn so với các phương pháp tài liệu trong MS Windows. – fnc12

1

Tại sao bạn không cập nhật thủ công Văn bản của một mục được đề cập? Bạn cũng có thể xem xét tung ra cơ chế databinding của riêng bạn cho ListBox. Và hãy xem ObjectListView để xem liệu đó có phải là trợ giúp không.

+0

ListBox không quan tâm đến ToStrings đã thay đổi của các thành phần được hiển thị. Lỗi không hợp lệ cũng vậy. Sẽ có một cái nhìn tại ObjectListView, có vẻ thú vị. :) – mafu

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