问题描述
我在将自动完成功能集成到我的 DataGridView 中时遇到了问题。当我自定义一个单元格时,我想打开一个建议列表。类似于谷歌搜索栏。我尝试了一些我在互联网上找到的东西,但没有成功。我从 https://github.com/Nimgoble/WPFTextBoxAutoComplete 下载了一个带有 AutoCompleteFunction 的包,它已经存在于 WinForms 但不在 WPF 中。这是我的代码:
<DataGridTextColumn Width="200" Header=" Column1 " Binding="{Binding Column1}">
<DataGridTextColumn.EditingElementStyle>
<Style targettype="TextBox">
<Setter Property="MaxLength" Value="50"></Setter>
<Setter Property="behaviors:AutoCompleteBehavior.AutoCompleteItemsSource" Value="{Binding ???,RelativeSource={RelativeSource AncestorType=DataGrid}}" />
<EventSetter Event="TextChanged" Handler="TextBox_TextChanged">
</Style>
</DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>
我想向我的项目添加一个新类,其中包含一个包含我需要的所有建议的列表(字符串)。也许有人有想法?我试图复制 Using WPF TextBox Autocomplete in a DataGrid 但我失败了。
解决方法
这是我的实际代码:
<DataGridTemplateColumn Width="200" Header=" Command ">
<DataGridTemplateColumn.CellTemplate >
<DataTemplate>
<wpf:AutoCompleteTextBox
MaxLength="50" Text="{Binding Command,Mode=TwoWay}"
Provider="{Binding suggestions}"
/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
绑定命令正常工作。
public interface ISuggestionProvider
{
IEnumerable GetSuggestions(string filter);
}
我只是从示例中复制了它 https://www.codeproject.com/Tips/801004/WPF-AutoComplete-TextBox
public DatabaseWindow()
{
InitializeComponent();
var provider = new SuggestionProvider(x =>
{
IEnumerable suggestions;
suggestions = "TEST1";
return suggestions;
});
}
,
对于将字符串集合绑定到 AutoCompleteTextBox(在您的情况下),您可以使用:
<wpf:AutoCompleteTextBox x:Name="MyTextBox"
Text="{Binding Command,Mode=TwoWay}"/>
...
var provider = new SuggestionProvider(x =>
{
var suggestions =new List<string>() { "TEST1","TEST2","TEST3" };
return suggestions;
});
MyTextBox.Provider = provider;