我想创建一个组合框,其功能类似于谷歌搜索数据库中的字段。我在VS 2015中添加了数据库作为数据源。我可以将数据集直接添加到我的组合框中吗?因为数据库没有显示在组合框的数据源属性中。我使用MariaDB和MySQL连接器6.9.8,因为在6.9.9中,似乎VS中存在数据集的错误。
在回答之前我不想在我的程序开始时使用方法,然后将List绑定到组合框...这不是问题。并不适用于此,因为条目可以每分钟更新。我想要一个组合框,在数据库中实时搜索条目。 因此,这个问题有一个很好的解决方案吗?我查找了一些可能的解决方案,但它们仅用于WinForms,或者在我的情况下,绑定到数据库的数据不起作用。
答案 0 :(得分:0)
也许this会这样做。虽然它在技术上是一个TextBox,但它的行为与Goolge的搜索字段非常相似,并且它非常易于使用。
基本上你要做的就是在你的XAML中放一个AutoCompleteTextBox并将它绑定到一个建议提供者,这是一个包含GetSuggestions方法的类,它将从数据库中获取项目。
Foo.cs:
class Foo
{
public string Label { get; set; }
public Foo(string p_label)
{
Label = p_label;
}
}
SuggestionProvider.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的过滤器是在编辑器中输入的文本(搜索字段)。
如果您希望在选择某些内容时(当您点击某个项目时)立即执行某项操作,还有一些工作要做,但如果您需要,我也可以帮助您。