我正試圖在WPF AutoCompleteBox上實現數據虛擬化。 我發現比亞Stollnitz代碼here其上一個ListView的偉大工程,我把它給上組合框的工作很容易,但也沒有辦法,我似乎可以得到它的AutoCompleteBox權工作。WPF AutoCompleteBox數據虛擬化
確切地說,它的工作原理 - 列表是虛擬化的,項目並非全部在啓動時加載 - 但似乎發生的情況是,只要ItemsSource更改並且結束,AutoCompleteBox就會遍歷列表中的所有項目(即在加載時,列表中的所有頁面都被請求,所以即使它們被虛擬化了,它們也將在開始時被請求並被加載)。我的猜測是,這是因爲ACBox所做的過濾,但我很驚訝沒有辦法阻止它,因爲控制通常允許使用Populating事件在服務器端完成過濾。
我覺得我失去了一些東西,我不能相信,沒有人之前或者說,它不能做做這樣的事情,所以我猜我只是在做一些顯然是錯誤的我不明白,因爲我是WPF的新手。
這裏有一些我已經做了嘗試,並取得了一起的東西(基於互聯網搜索周圍類似的問題):
我確信所有的條件內置UI虛擬化是確定的,包括明確地打開它,設置列表框的最大高度等。
我用自己的例子中Bea使用的ListView替換了ListView中的ListBox。並排顯示,ListView本身按預期工作,但嵌入在ACBox中的不是。
我試着用在ACBox沒有過濾,使用自定義過濾器,手動搬運填充evenet等,這並沒有幫助。製作自定義過濾器顯然是不夠的,因爲自定義過濾器只允許您指定評估一個項目的結果,循環訪問列表的代碼不可見,因此您無法防止循環。將過濾器設置爲「無」也不會執行任何操作。
任何和所有的建議,歡迎!
這個目標是.NET 3.5和我使用WPF工具包(2010年2月發佈)
謝謝!
注:古怪足夠的(雖然看似不相關的),UI虛擬化沒有工作,直到我已經設置在C#代碼列表框/視圖的MaxHeight。當我以前在XAML中設置它時,它不起作用。但是這並沒有幫助主要問題。 –
我可以知道你是如何使用Combobox工作的?任何指針將不勝感激 – Signcodeindie
@Signcodeindie這是相當直接的,我只是從Bea的例子與列表框工作。在最基本的方面,你只需將AsyncVirtualizingCollection分配給ComboBox的ItemsSource,它可以工作,但你需要更多的樣式才能真正使它看起來和感覺正確(但你幾乎可以在她的例子中複製/粘貼樣式)。如果你遇到了一些問題,也許一件好事就是打開一個新的問題來獲得幫助。 –