Tôi đang cố gắng để ràng buộc một bộ sưu tập lớn để một ComboBox và tôi phải đối mặt với vấn đề hiệu suất khi mở popup của ComboBox. Tôi đã tìm kiếm trên internet và thấy rằng việc sử dụng VirtualizingStackPanel như một mẫu bảng điều khiển các mục có thể hữu ích, nhưng nó chỉ giúp một phần. Nếu tôi liên kết một bộ sưu tập lớn với một ComboBox, tôi có thể mở popup rất nhanh, đó là ok, nhưng nếu sau đó tôi ràng buộc một bộ sưu tập khác vào một ComboBox và cố gắng mở popup một lần nữa, nó trở nên rất chậm. Tương tự đang xảy ra nếu bạn mở popup cho một ComboBox rỗng, sau đó ràng buộc bộ sưu tập lớn và cố gắng để mở popup một lần nữa - phải mất một vài giây trước khi popup mở ra.WPF ComboBox vấn đề hiệu suất bằng cách ràng buộc một bộ sưu tập lớn
Đây là XAML:
<ComboBox Name="cbBlah">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
và mã mẫu cho ràng buộc để tạo lại vấn đề:
var list = new List<string>();
for (var i = 0; i < new Random().Next(9000, 10000); i++)
list.Add(i.ToString());
cbBlah.ItemsSource = list;
tôi đã cố gắng để làm cho việc ảo hóa ngăn xếp bảng trông như thế này:
<VirtualizingStackPanel VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Recycling" />
nhưng không hiệu quả, có vẻ như VirtualizationMode bị bỏ qua vì vậy cửa sổ bật lên mở nhanh rất nhanh lần đầu tiên và sau đó, mỗi lần sau khi thay đổi ràng buộc, nó rất chậm.
CẬP NHẬT: Tôi đã nghĩ về việc không ràng buộc bộ sưu tập mới mỗi lần, nhưng liên kết một ObservableCollection một lần và sau đó chỉ thay đổi nội dung của nó. Cùng một điều, càng sớm càng nội dung thay đổi bộ sưu tập, mở một popup vẫn phải mất vài giây :(
hãy nhìn vào những câu hỏi mà tôi đã trả lời http://stackoverflow.com/a/8555403/920384 – punker76