[英]C# WPF autocomplete Combobox with database
我想創建一個組合框,類似於谷歌搜索數據庫中的字段。 我在VS 2015中將數據庫添加為數據源。是否可以將數據集直接添加到組合框? 因為數據庫沒有顯示在組合框的數據源屬性中。 我使用MariaDB和MySQL連接器6.9.8,因為在6.9.9中,似乎VS中的數據集存在錯誤。
在回答之前,我不想在程序開始時有一個方法,然后將一個List綁定到組合框...這不是問題。 並且對此不起作用,因為條目可以每分鍾更新。 我想要一個在數據庫中實時搜索條目的組合框。 因此,有解決這個問題的好方法嗎? 我查找了一些可能的解決方案,但它們僅適用於WinForms,或者就我而言,與數據庫的數據綁定不起作用。
也許這會做。 即使從技術上講它是TextBox,它的行為也與Goolge的搜索字段完全一樣,並且非常易於使用。
基本上,您所需要做的就是將AutoCompleteTextBox放入XAML中並將其綁定到建議提供者,該提供者是一個類,該類包含一個GetSuggestions方法,該方法將從數據庫中獲取項目。
Foo.cs:
class Foo
{
public string Label { get; set; }
public Foo(string p_label)
{
Label = p_label;
}
}
RecommendationionProvider.cs:
class SuggestionProvider
{
public IEnumerable GetSuggestions(string filter)
{
var returnList = new List<Foo>();
foreach(/* Get items from the databse */)
{
returnList.Add(new Foo(/* Label from database */));
}
return returnList;
}
}
XAML:
<!-- ... -->
<Window.Resources>
<DataTemplate x:Key="ItemTemplate">
<TextBlock Text="{Binding Path=Label}"/>
</DataTemplate>
</Window.Resources>
<!-- ... -->
<WpfControls:AutoCompleteTextBox ItemTemplate="{StaticResource ResourceKey=ItemTemplate}"
Provider="{Binding Path=SuggestionProvider}"
DisplayMember="Label"/>
每次您在AutoCompleteTextBox的編輯器(文本字段)中鍵入某些內容時,都會執行SuggestionProvider的GetSuggestions方法,並將返回對象列表。 這些對象將根據您定義的DataTemplate用於構建建議彈出窗口。 AutoCompleteTextBox的DisplayMember屬性是對象的成員(屬性),一旦選擇了對象,該成員應在編輯器中顯示。
該SuggestionProvider的過濾器是在編輯器(搜索字段)中輸入的文本。
如果您希望它在選定某項后立即執行某項操作(單擊某項時),則還有更多工作要做,但是如果需要,我也可以為您提供幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.