2012-01-03 23 views
5

Tôi có hai ListBox trong ứng dụng winforms của tôi, tôi assigné một nguồn dữ liệu cho cả hai như sau:Một DataSource cho nhiều điều khiển

private void MakeMeasurementUnits() 
{ 
    var units = new List<MeasurementUnit> 
        { 
         new MeasurementUnit {Name = "Current", SiUnit = "A"}, 
         new MeasurementUnit {Name = "Voltage", SiUnit = "V"}, 
         new MeasurementUnit {Name = "Time", SiUnit = "s"}, 
         new MeasurementUnit {Name = "Temprature", SiUnit = "°C"} 
        }; 

    lbxXunit.DataSource = units; 
    lbxYunit.DataSource = units; 
} 

Điều kỳ lạ là (hoặc có lẽ vì đó là thời gian đầu tiên của tôi !!), trong biểu mẫu khi tôi nhấp vào các mục của một trong các hộp lisbox này, cùng một mục trong hộp danh sách thứ hai cũng được chọn. Đây có phải là hành vi mặc định không? làm thế nào để ngăn chặn điều này? Nếu đây là hành vi mặc định, điều gì hữu ích về nó?

Tôi tìm thấy biện pháp khắc phục nhanh để tạo hai nguồn dữ liệu khác nhau (cùng tên với một tên khác)

Trả lời

5

Hộp danh sách dường như lưu trữ nguồn ràng buộc. Đây là hành vi mặc định. Nếu bạn muốn tránh điều này, cách dễ dàng là để tạo ra một bản sao của danh sách liên kết với các nguồn dữ liệu thứ hai:

lbxXunit.DataSource = units; 
lbxYunit.DataSource = units.ToList(); 

này rất hữu ích khi bạn có nhiều quan điểm của cùng một dữ liệu và muốn đồng bộ hóa lựa chọn các mục này.

1

Hành vi này chính xác là. Việc quản lý datasource trong WindowsForms cũng theo dõi mục được chọn kiểm soát và thao tác dữ liệu bị ràng buộc.

Độ phân giải bạn đã tìm thấy: được chỉ định 2 khác nhau data sources objects cho các điều khiển này.

3

Có, đây là hành vi bình thường. Điều này xảy ra bởi vì điều khiển ListView sử dụng một đối tượng BindingSource để theo dõi mục hiện đang được chọn. (Danh sách không có cách nào để theo dõi một mục đã chọn mà không có một BindingSource.)

Theo mặc định, một DataSource trong điều khiển WinForms sử dụng một BindingSource được tạo bởi chính hệ thống WinForms.

Bạn có thể đọc thêm về BindingSource tại địa chỉ: http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.aspx

Có một bài viết ở đây mà có thể giúp quá: http://blogs.msdn.com/b/bethmassi/archive/2007/09/19/binding-multiple-comboboxes-to-the-same-datasource.aspx

2

Các hành vi bạn đã lưu ý là mặc định/hành vi chính xác cho winforms điều khiển. Bạn có thể đạt được những gì bạn đang có sau khi thiết lập một BindingContext mới cho điều khiển hộp danh sách thứ hai của bạn mà không cần tạo một bản sao của nguồn dữ liệu của bạn.

BindingContext

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