在 DataGridView 中编辑单元格时 C# WPF 自动完成

问题描述

我在将自动完成功能集成到我的 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;