Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在数据网格中使用WPF文本框自动完成_C#_Wpf_Xaml_Autocomplete_Wpfdatagrid - Fatal编程技术网

C# 在数据网格中使用WPF文本框自动完成

C# 在数据网格中使用WPF文本框自动完成,c#,wpf,xaml,autocomplete,wpfdatagrid,C#,Wpf,Xaml,Autocomplete,Wpfdatagrid,我最近在这里抓到了这个项目:它将自动完成行为添加到WPF中的文本框中 将此属性添加到自动完成行为的文本框中:行为:AutoCompleteBehavior.autocompleteetemssource=“{Binding YourCollection}” 我试图让该行为与DataGridTextColumn中的文本框一起工作,但没有成功。如何将此属性添加到DataGridTextColumn中包含的文本框中 谢谢 编辑:尝试创建DataTemplate列,但仍不起作用 <

我最近在这里抓到了这个项目:它将自动完成行为添加到WPF中的文本框中

将此属性添加到自动完成行为的文本框中:
行为:AutoCompleteBehavior.autocompleteetemssource=“{Binding YourCollection}”

我试图让该行为与DataGridTextColumn中的文本框一起工作,但没有成功。如何将此属性添加到DataGridTextColumn中包含的文本框中

谢谢

编辑:尝试创建DataTemplate列,但仍不起作用

        <DataGridTemplateColumn Header="Test Stuff">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBox behaviors:AutoCompleteBehavior.AutoCompleteItemsSource="{Binding TestItems,  RelativeSource={RelativeSource AncestorType=DataGrid}}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

如果我的DataGrid绑定关闭了,可能会发生什么?以下是数据网格:

<DataGrid ItemsSource="{Binding UsersList.Users}"
                      AutoGenerateColumns="False"
                      GridLinesVisibility="All"
                      FontSize="12"
                      Margin="0"
                      HorizontalAlignment="Center"
                      BorderThickness="0">
                <DataGrid.RowStyle>
                    <Style TargetType="{x:Type DataGridRow}"
                           BasedOn="{StaticResource MetroDataGridRow}">
                    </Style>
                </DataGrid.RowStyle>
                <DataGrid.CellStyle>
                    <Style TargetType="{x:Type DataGridCell}">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type DataGridCell}">
                                    <Grid Background="{TemplateBinding Background}">
                                        <ContentPresenter VerticalAlignment="Center" />
                                    </Grid>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </DataGrid.CellStyle>
                <DataGrid.Columns>
                    <DataGridTextColumn Binding="{Binding Name}"
                                        ClipboardContentBinding="{x:Null}"
                                        behaviors:AutoCompleteBehavior.AutoCompleteItemsSource="{Binding TestItems,  RelativeSource={RelativeSource AncestorType=DataGrid}}"
                                        Header="Name" />
                    <DataGridTextColumn Binding="{Binding ID}"
                                        ClipboardContentBinding="{x:Null}"
                                        Header="User ID" />
                    <DataGridCheckBoxColumn Binding="{Binding Valid}"
                                            ElementStyle="{DynamicResource MetroDataGridCheckBox}"
                                            ClipboardContentBinding="{x:Null}"
                                            Header="Valid Name" />
                    <DataGridTemplateColumn Header="Test Stuff">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TextBox behaviors:AutoCompleteBehavior.AutoCompleteItemsSource="{Binding TestItems,  RelativeSource={RelativeSource AncestorType=DataGrid}}" />
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>

您应该使用该行为,可能您的行的DataContext有问题


按照下面的答案更新您的行为绑定,从DataGrid获取DataContext:

如果有人仍然对此主题感兴趣,有一种简单的方法可以将autocomplete绑定到datagridtextcolumn。 使用来自的自动完成行为 以及使用来自的BindingProxy类

。。。
xmlns:behaviors=“clr命名空间:WPFTextBoxAutoComplete;程序集=WPFTextBoxAutoComplete”
...
...
初始化组件();
BindingProxy BindingProxy=dataGrid.Resources[“proxy”]作为BindingProxy;
var list=新列表();
列表。添加(“abc”);
列表。添加(“bcd”);
bindingProxy.Data=list;
....

TextColumn单元格已经成功地将数据绑定到字符串属性。这与此无关吗?绑定textcolumn和AutoCompleteItemsSource的字符串属性是同一对象的成员?它们是。同一对象同时具有这两个属性。我使用相同的ViewModel(并将TextBox绑定到字符串以及自动完成的集合)和autocomplete did函数测试了一个TextBox。除了DataGridTextColumn本身之外,还有什么地方需要放置此属性吗?UsersList.Users有一个名为TestItems的属性?我刚刚意识到!!发布后,我注意到我需要引用UserControl正在使用的DataContext,而不是DataGrid正在使用的DataContext。谢天谢地,这很容易,因为我使用的是静态资源,直到我能够找到如何在windows和用户控件之间正确使用DymanicResources。
...
xmlns:behaviors="clr-namespace:WPFTextBoxAutoComplete;assembly=WPFTextBoxAutoComplete"
...
<DataGrid Name="dataGrid">
    <DataGrid.Resources>
        <local:BindingProxy x:Key="proxy" Data="{Binding}" />
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTextColumn Header = "Target" Binding = "{Binding Target}">
            <DataGridTextColumn.EditingElementStyle>
                <Style TargetType="{x:Type TextBox}">
                    <Setter Property="behaviors:AutoCompleteBehavior.AutoCompleteItemsSource"
                        Value="{Binding Data, Source={StaticResource proxy}}" />
                    </Style>
             </DataGridTextColumn.EditingElementStyle>
        </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>
...
InitializeComponent();
BindingProxy bindingProxy = dataGrid.Resources["proxy"] as BindingProxy;
var list = new List<string>();
list.Add("abc");
list.Add("bcd");
bindingProxy.Data = list;
....