2009-09-18 48 views
0

我有這種情況,我有一個ListBox這是從後臺線程(它是一個地址簿和數據來自AD)填充。WPF:獲取列表框保持放

問題是,由於列表被排序(使用CollectionViewSource),並且在檢索更多數據時也可用於用戶,因爲新項目正在列表中的各個位置插入,所以它在各處跳動。因此用戶可以使用它,但由於用戶的選擇不在視野內,因此大多數情況下無法使用。

有沒有辦法讓Focus保持選定的項目,並保留選擇,即使項目被插入到後臺線程選擇的上方和下方?我不想在服務器上排序,我知道在服務器上可能是一件壞事。

+0

是否可以填充列表,然後開始工作?或者數據的到達可以隨時進行? – manji 2009-09-18 17:27:43

+0

理想情況下(因爲它的意圖)是,他們可以處理部分結果,因爲更多結果正在進入。我不想讓他們在填充列表框時等待可能的分鐘數。 – 2009-09-18 17:52:52

回答

0

我將從UI設計的角度迴應這個問題,而不是技術代碼的觀點。 (我敢肯定別人會有辦法讓列表框保留選定的項目)

我會爭辯說,使用列表框而大量的數據被添加到它是相當不可能的做得很好。讓我們只是說,你得到它來保持選擇的視野,當用戶仍然在尋找他們所需的物品時,你怎麼樣,你將無法保持它。

首先,如果預計的總加載時間少於10秒,您可以禁用列表框直到加載完成。 (很明顯,這是一個旋轉動畫或其他東西,因此用戶可以看到它正在做某件事)。我假設你已經解散了這個選項,否則你可能不會問這裏。但我認爲這值得考慮。如果加載時間太小,請考慮您的用戶是否可以通過在列表正在加載時瀏覽列表來獲得真正的收益。其次,我建議你找到一種限制列表框內容的方法,以便一次只顯示少量數據。您可以通過僅顯示以字母的單個字母開頭的名稱(以及字母選擇控件)來完成此操作。或者,您可以在頂部提供一個過濾器條目文本框,用戶可以鍵入前幾個字母,而列表框僅顯示以這些字母開頭的名稱。這將允許用戶鍵入say「sa」,列表框將顯示「sam」,「samantha」,「sacha」等。現在,只有少量的項目在列表中,因此您不必擔心它跳來跳去。如果列表中的項目數量變得太大(因爲在後臺線程上加載)並且列表超出了框的高度,則用戶可以簡單地鍵入額外的字母來進一步過濾列表。

對不起,如果這不是真的你想要的,但我認爲這將是值得帶來另類設計,因爲你忽視了它。

+0

謝謝。我確實同意你的意見,但你會如何親自實施一個地址簿(想想一個Exchange地址簿,雖然在這種情況下它是來自AD)並且有數十萬條條目?類似Outlook的地址簿會很有意義。如果人們不得不選擇一個字母來查找名稱,通常從UI設計的角度來看,真的很煩人,點擊越少越好。而當談到本地化時,你真的想選擇40,000+以上的日文或漢文字嗎? – 2009-09-18 17:44:45

+0

爲了繼續,我確實實現了一個過濾器,但我希望它過濾顯示數據。它可以緩解但不能消除這個問題。我不想讓它返回服務器並導致傳輸新的數據集。 另外,根據AD服務器如何感受那一刻,加載時間從15秒到15秒不等。 – 2009-09-18 17:46:37