簡體   English   中英

具有數據庫的C#WPF自動完成組合框

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM