2009-09-07 20 views
32

MVVM'mde ObservableCollection'a giden bir ItemsControl için sanal birleştirme kümesinin nasıl uygulanacağına dair basit bir açıklama istiyorum.WPF Daha yüksek performans için VirtualizingStackPanel

Sekme denetimindeki her sekme için bir ItemsControl örneğim var ve ItemsControl genişlediğinde sekmeleri değiştirmek çok yavaş oluyor.

Uygulamayı hızlandırmak için ne yapabilirim?

Bir WPF profilleyicisini açtım ve her sekmedeki ItemsControl öğesinde görüntülenen her öğenin (özel kullanıcı denetimi olan), kendi ContentPresenter olduğunu gördüm. Bu yüzden 100 MVDM'de ObservableCollection'umda 100 içerik çalışanı vardı. Bu doğru mu? Nasıl optimize edebilirim?

cevap

48

Çok yardımcı olabilecek iki teknik var. Her ikisi de Bea Stolnitz tarafından blog numaralı telefondan çok iyi tanımlanmıştır.

ilk

UI Virtualization ve ikinci UI az şey çizmek yapmak için VirtualizingStackPanel gibi şeyler kullanmak UI sanallaştırma olarak Data Virtualization

olduğunu.

Veri sanallaştırma sadece 100

Yani UI sanallaştırma göstereceğim şeylerin sayısı çizilmiş en aza indirir ve veri sanallaştırma şeylerin sayısını en aza indirir zaman sen belleğe bir milyon nesneleri üzme emin olur could çizilebilir.

9

Ben tam TabControl ve DataGrid kullanarak WPF ind aynı problem vardı yardımcı olur

Umut. DataGrid öğesi boyutunu büyüterek, sekmeleri değiştirmek ÇOK yavaş olur! Bundan sonra, bu yazıyı önceki cevapta olduğu gibi Bea Stolnitz'den okuyarak buldum. Çözelti :-))

http://groups.google.com/group/wpf-disciples/browse_thread/thread/6f3531a1720252dd

Sorun o tam açıklar ve verir .... perf isabet: Bu beni bana DrWPF bağlantı veren "tabcontrol VirtualizingStackPanel wpf" google ipucu verdi ağacın inşası sırasında. Eğer bir TabControl ItemsSource
mülkiyet bağlayıcı ile tipik MVVM yaklaşım kullanıyorsanız
yazık ki, tüm bir ağaç her zaman
bir sekme öğe seçildiğinde yeniden oluşturulması gerekir. Bu genellikle çok pahalı bir işlemdir. ....