如何在我的 DataGrid 中找到我的 WPF 自动完成框?
How can i find my WPF Autocompletebox in my DataGrid?
您好,几天来我一直在尝试将自动完成框集成到我的项目中,但不幸的是没有成功。我有点绝望了。我至少为我的 Datagrid (DotNetProjects.WpfToolkit.Input 6.0.90 https://www.nuget.org/packages/DotNetProjects.WpfToolkit.Input/) but I can't put it in my . I followed the instructions in this video: https://www.youtube.com/watch?v=SK8TXvcPWqI 之外的文本框找到了一个非常简单的解决方案。我将 post 我的代码在这里:
<Grid>
<controls:AutoCompleteBox x:Name="ACB2" Text="TT" ></controls:AutoCompleteBox>
</Grid>
这个盒子正在工作。我可以在我的代码中找到“ACB2”框:
public Databasewindow()
{
InitializeComponent();
ACB2.FilterMode = AutoCompleteFilterMode.Contains;
ACB2.ItemsSource = new string[] { "TEST1", "TEST2 TEST2", "TEST3 TEST3" };
}
但是当我尝试填充列并使用此框时,我失败了,再也找不到我的文本框了
<Grid>
<DataGrid x:Name="DataGrid1"
<DataGridTemplateColumn Width="200" Header=" Command ">
<DataGridTemplateColumn.CellTemplate >
<DataTemplate>
<controls:AutoCompleteBox
Text="{Binding Command, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
x:Name="ACB2"
></controls:AutoCompleteBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid>
</Grid>
Binding Text="{Binding Command, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 运行良好。但是我再也找不到我的代码中的 x:Name="ACB2" 了。谁能帮我这个?我尝试了许多不同的 AutoCompleteFunctions (Nuget),但我总是遇到建议绑定问题。也许有人对此有一些经验,可以帮助我吗?那会非常非常好。亲切的问候
有很多方法可以做到这一点,但我会告诉你最简单的。将 x:Name 放入您的 DataGrid 并获取其第一个子项,这样它将成为您的文本框。如果您有更难实现的东西,请查看 MVVM 和 DataBinding...获取信息的途径很长,但在使用 WPF 时了解它是正确的事情。
public List<string> AutoCompleteBoxItems { get; set; } = new List<string>();
public Databasewindow()
{
InitializeComponent();
AutoCompleteBoxItems.Add("Test1");
AutoCompleteBoxItems.Add("Test2");
}
和XAML
<controls:AutoCompleteBox Text="{Binding Command, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
ItemsSource="{Binding AutoCompleteBoxItems}"
FilterMode="Contains"></controls:AutoCompleteBox>
您也可以使用此 来查找您的 UIElement,但在 DatGrid.Loaded 事件中执行此操作。您始终可以扩展该方法并找到所有相同的 UIElement,但这同样不是您应该做的。使用 DataBinding insted。强烈推荐。
所以我找到了解决绑定问题的方法。感谢 Melkor V 的支持。这是我的代码:
在我的 Xaml 中,我必须为我的绑定添加这些行:
XAML:
xmlns:controls='clr-namespace:System.Windows.Controls;assembly=DotNetProjects.Input.Toolkit' xmlns:local="clr-namespace:Databases"
在我的 Datagrid 中 => Commandselection 是 Class 我在其中写了一个列表,而 AutoCompleteBoxItems 是列表的名称
<DataGrid
<DataGrid.DataContext>
<local:Commandselection/>
</DataGrid.DataContext>
</DataGrid>
<DataGridTemplateColumn Width="200" Header=" Command ">
<DataGridTemplateColumn.CellTemplate >
<DataTemplate>
<controls:AutoCompleteBox
Text="{Binding Command, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
ItemsSource="{Binding Path = DataContext.AutoCompleteBoxItems, RelativeSource={RelativeSource AncestorType=DataGrid}}"
FilterMode="Contains"
></controls:AutoCompleteBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
这是我的 Class 的代码:
class Commandselection
{
public static ObservableCollection<string> AutoCompleteBoxItems { get; set; }
public Commandselection()
{
AutoCompleteBoxItems = new ObservableCollection<string>()
{
"Apple",
"Banana",
"Carrot",
"Dog",
"Elderberry",
"Fruit",
"Grapes",
"Honey",
"Iron"
};
}
}
您好,几天来我一直在尝试将自动完成框集成到我的项目中,但不幸的是没有成功。我有点绝望了。我至少为我的 Datagrid (DotNetProjects.WpfToolkit.Input 6.0.90 https://www.nuget.org/packages/DotNetProjects.WpfToolkit.Input/) but I can't put it in my . I followed the instructions in this video: https://www.youtube.com/watch?v=SK8TXvcPWqI 之外的文本框找到了一个非常简单的解决方案。我将 post 我的代码在这里:
<Grid>
<controls:AutoCompleteBox x:Name="ACB2" Text="TT" ></controls:AutoCompleteBox>
</Grid>
这个盒子正在工作。我可以在我的代码中找到“ACB2”框:
public Databasewindow()
{
InitializeComponent();
ACB2.FilterMode = AutoCompleteFilterMode.Contains;
ACB2.ItemsSource = new string[] { "TEST1", "TEST2 TEST2", "TEST3 TEST3" };
}
但是当我尝试填充列并使用此框时,我失败了,再也找不到我的文本框了
<Grid>
<DataGrid x:Name="DataGrid1"
<DataGridTemplateColumn Width="200" Header=" Command ">
<DataGridTemplateColumn.CellTemplate >
<DataTemplate>
<controls:AutoCompleteBox
Text="{Binding Command, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
x:Name="ACB2"
></controls:AutoCompleteBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid>
</Grid>
Binding Text="{Binding Command, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 运行良好。但是我再也找不到我的代码中的 x:Name="ACB2" 了。谁能帮我这个?我尝试了许多不同的 AutoCompleteFunctions (Nuget),但我总是遇到建议绑定问题。也许有人对此有一些经验,可以帮助我吗?那会非常非常好。亲切的问候
有很多方法可以做到这一点,但我会告诉你最简单的。将 x:Name 放入您的 DataGrid 并获取其第一个子项,这样它将成为您的文本框。如果您有更难实现的东西,请查看 MVVM 和 DataBinding...获取信息的途径很长,但在使用 WPF 时了解它是正确的事情。
public List<string> AutoCompleteBoxItems { get; set; } = new List<string>();
public Databasewindow()
{
InitializeComponent();
AutoCompleteBoxItems.Add("Test1");
AutoCompleteBoxItems.Add("Test2");
}
和XAML
<controls:AutoCompleteBox Text="{Binding Command, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
ItemsSource="{Binding AutoCompleteBoxItems}"
FilterMode="Contains"></controls:AutoCompleteBox>
您也可以使用此
所以我找到了解决绑定问题的方法。感谢 Melkor V 的支持。这是我的代码:
在我的 Xaml 中,我必须为我的绑定添加这些行:
XAML:
xmlns:controls='clr-namespace:System.Windows.Controls;assembly=DotNetProjects.Input.Toolkit' xmlns:local="clr-namespace:Databases"
在我的 Datagrid 中 => Commandselection 是 Class 我在其中写了一个列表,而 AutoCompleteBoxItems 是列表的名称
<DataGrid
<DataGrid.DataContext>
<local:Commandselection/>
</DataGrid.DataContext>
</DataGrid>
<DataGridTemplateColumn Width="200" Header=" Command ">
<DataGridTemplateColumn.CellTemplate >
<DataTemplate>
<controls:AutoCompleteBox
Text="{Binding Command, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
ItemsSource="{Binding Path = DataContext.AutoCompleteBoxItems, RelativeSource={RelativeSource AncestorType=DataGrid}}"
FilterMode="Contains"
></controls:AutoCompleteBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
这是我的 Class 的代码:
class Commandselection
{
public static ObservableCollection<string> AutoCompleteBoxItems { get; set; }
public Commandselection()
{
AutoCompleteBoxItems = new ObservableCollection<string>()
{
"Apple",
"Banana",
"Carrot",
"Dog",
"Elderberry",
"Fruit",
"Grapes",
"Honey",
"Iron"
};
}
}