我正在使用WP7 Silverlight Toolkit中的AutoCompleteBox。我已經看到他們將一個靜態列表(不變的List)的字符串綁定到AutoCompleteBox的例子。但是,是否有示例顯示如何以更動態的方式綁定AutoCompleteBox?我的下面的嘗試繼續拋出一個InvalidOperationException:在CollectionChanged或PropertyChanged事件期間無法更改ObservableCollection。如何將AutoCompleteBox綁定到windows phone中的非靜態列表中
這是我在我的xaml。
<toolkit:AutoCompleteBox x:Name="tbQuery" TextChanged="tbQuery_TextChanged" />
在我的代碼隱藏,我已經模擬去數據庫或跨網絡如下。
private void tbQuery_TextChanged(object sender, RoutedEventArgs e)
{
AutoCompleteBox acBox = sender as AutoCompleteBox;
string txt = acBox.Text;
if (txt.Length > 0)
{
//exception thrown below here;
//_words is of type ObservableCollection<string>
//earlier, acBox.ItemsSource was set to _words
_words.Clear();
_words.Add(txt + "a");
_words.Add(txt + "b");
_words.Add(txt + "c");
}
}
我也嘗試過類似的東西,但它沒有工作。拋出相同的InvalidOperationException。
private void tbQuery_TextChanged(object sender, RoutedEventArgs e)
{
AutoCompleteBox acBox = sender as AutoCompleteBox;
string txt = acBox.Text;
if (txt.Length > 0)
{
List<string> list = new List<string>();
list.Add(txt + "a");
list.Add(txt + "b");
list.Add(txt + "c");
//exception thrown below here;
acBox.ItemsSource = list;
}
}
演示工具包中僅顯示了一個靜態的資源,最例子只是一個靜態列表中顯示。這是因爲AutoCompleteBox不能以動態方式使用嗎?
如果我有10,000個字符串的列表(我有更多的),你是說實際加載10,000個字符串並將其綁定到AutoCompleteBox?加載10,000個字符串需要多長時間?這需要多少內存?如果我們能夠檢測到用戶輸入的內容,執行後臺過濾過程,爲用戶界面提供一個新的(和更短的)列表,它會不會更有效率?我想我知道這個AutoCompleteBox不像你的AJAX自動完成小部件那樣動態。如果沒有,我就不會使用它,因爲它不起作用,但對於微不足道的情況,並不會擴展。 – jake
100 * 100 = 10000.在模擬器和真實設備上都是即時的。 (實際上,在真實設備上速度更快)。我已經指出,它**不具備動態綁定的能力(因此我告訴你重新編程它)。但是一次不提取所有數據的想法是愚蠢的。在手機上,一次完成所有事情幾乎總是會有更好的表現。而32GB的內存,你不應該擔心值半字節的字符串。 –
好吧,讓我試試看。謝謝。 – jake