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