Hayır, arka plan iş parçacığı kullanmaz. Kaynağı kendiniz WPF Tookit'da okuyabilirsiniz. Ancak, bir arka plan iş parçacığı üzerinde kendiniz yapmanıza izin verecek kadar esnektir.
Bu yaklaşımı kullanabilirsiniz
:
Populating
olayı Kulp: iptal ve arka plan işçi tamamlandığında SearchText
- kullanarak arka plan işçi başlatın:
ItemsSource
set ve çağrı PopulateComplete
MSDN belgelerinde bunun tam bir örneği var:
örnek otomatik tamamlama verileri doldurmak için bir asenkron web hizmeti kullanan ama aynı fikri çok büyük bir veri kümesini arama için de geçerlidir bu. Arka plan iş parçacığı
Güncelleme: İşte
arama, bir arka plan iş parçacığı üzerinde meydana ile tam bir örnektir. Uzun bir aramayı simüle etmek için bir saniyelik bir uyku içerir:
private class PopulateInfo
{
public AutoCompleteBox AutoCompleteBox { get; set; }
public string SearchText { get; set; }
public IEnumerable<string> Results { get; set; }
}
private void AutoCompleteBox_Populating(object sender, PopulatingEventArgs e)
{
var populateInfo = new PopulateInfo
{
AutoCompleteBox = sender as AutoCompleteBox,
SearchText = (sender as AutoCompleteBox).SearchText,
};
e.Cancel = true;
var ui = TaskScheduler.FromCurrentSynchronizationContext();
var populate = Task.Factory.StartNew<PopulateInfo>(() => Populate(populateInfo));
populate.ContinueWith(task => OnPopulateComplete(task.Result), ui);
}
private PopulateInfo Populate(PopulateInfo populateInfo)
{
var candidates = new string[] {
"Abc",
"Def",
"Ghi",
};
populateInfo.Results = candidates
.Where(candidate => candidate.StartsWith(populateInfo.SearchText, StringComparison.InvariantCultureIgnoreCase))
.ToList();
Thread.Sleep(1000);
return populateInfo;
}
private void OnPopulateComplete(PopulateInfo populateInfo)
{
if (populateInfo.SearchText == populateInfo.AutoCompleteBox.SearchText)
{
populateInfo.AutoCompleteBox.ItemsSource = populateInfo.Results;
populateInfo.AutoCompleteBox.PopulateComplete();
}
}
Teşekkürler ama bir şekilde benim için işe yaramadı. Neden tüm ItemsSource'u ve yalnızca açılır listeyi güncellemediler? – Erez
Popülasyon olayını kendiniz hallederseniz, yalnızca ItemsSource'u eşleşen adaylara ayarlamanız gerekir. –
Harika çözüm! –