私はツールキット(VS 2008)を介してオートコンプリートボックスを持つWPFアプリケーションを持っています。私は約2000レコードの潜在的な人口を持っています。私は、ポピュレートするイベントプロシージャの組み合わせでパフォーマンスを向上させようとしました。矛盾した結果が出ています。フィルタはOKだと思われますが、私はそのアプリケーションを一度実行することができ、結果Xはそこにありますが結果は残っていません。それをやり直すことで結果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