我有一個WPF應用程序,通過工具包(VS 2008)自動完成框。我有大約2000條記錄的潛在人口,我試圖通過組合填充事件過程來提高性能。我得到的結果不一致。該過濾器似乎沒問題,但我可以運行應用程序一次,結果X將在那裏,但結果Y不會。再次運行它可以使結果Y在那裏而不是X,隨後的時間X和Y都會在那裏,等等等等。這是我第一次使用自動完成框,所以我相信它肯定是我的代碼中的東西,我忘了。如果在Itemsource綁定之前檢查我的結果集,那麼所需的結果就在那裏,但它們對用戶不可見 - 下拉式自動完成後不顯示。也許我需要一個事件重寫?自動完成框 - 來自人口的值不一致
的XAML
<input:AutoCompleteBox
Name="autGlobal"
FilterMode="Contains"
Style="{DynamicResource MiniSearchAutoBoxWPF}"
IsTextCompletionEnabled="false"
Margin="5, 0, 5, 0"
HorizontalAlignment="Center"
KeyUp="autGlobal_KeyUp"
Text="Search Term"
GotFocus="autGlobal_GotFocus"
ValueMemberPath="Item"
Populating="AutoCompleteBox_Populating"
>
方法
private void AutoCompleteBox_Populating(object sender, PopulatingEventArgs e)
{
e.Cancel = true;
var b = new BackgroundWorker();
currSearch = autGlobal.Text;
b.DoWork += b_DoWork;
b.RunWorkerCompleted += b_RunWorkerCompleted;
b.RunWorkerAsync(autGlobal.Text);
}
private void b_DoWork(object sender, DoWorkEventArgs e)
{
Results.Clear();
int counter = 0;
string search = e.Argument.ToString();
search = search.ToUpper();
foreach (GlobalSearchList person in myGlobalList)
{
if (person.Item.ToUpper().Contains(search))
{
Results.Add(person);
counter++;
if (counter >= MAX_NUM_OF_RESULTS)
{
break;
}
}
}
}
private void b_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (this.Dispatcher.Thread == System.Threading.Thread.CurrentThread)
{
//Set the source
if (currSearch == autGlobal.Text)
{
autGlobal.ItemsSource = Results;
autGlobal.PopulateComplete();
}
}
else
{
this.Dispatcher.Invoke(new Action(() =>
{
//Set the source
if (currSearch == autGlobal.Text)
{
autGlobal.ItemsSource = Results;
autGlobal.PopulateComplete();
}
}));
}
}
似乎這種情況正在做一些事情......「counter> = MAX_NUM_OF_RESULTS」..我認爲這是防止少數記錄.. – Bathineni 2012-01-05 17:39:59