【发布时间】:2020-08-09 17:03:48
【问题描述】:
我知道有人问过这个问题,并且我查看了很多结果,但我发现的结果似乎并不完全有效,或者它们给我带来了问题。
我想要的是一个我可以输入的组合框,它将开始自动完成并根据单个列缩小范围。例如,如果我有名字和姓氏,我会输入,姓氏会缩小。
在下面的示例中,当我在组合框中选择一个值时,我得到“System.Data.DataRowView”。 我已经使用选择更改事件进行了测试,只是为了检查,我什至无法为组合设置文本,但如果我可以从数据表中返回正确的值。
如果对一个好的综合资源有任何建议,比如网站、教程、视频、在线课程、书籍,我将不胜感激。
- 搜索组合框和自动更新项目
- 显示选定项目的特定字段
资源 XAML:
<Style x:Key="txtStyle" TargetType="{x:Type TextBlock}">
<Setter Property="TextAlignment" Value="Left"></Setter>
<Setter Property="FontSize" Value="14"></Setter>
<Setter Property="HorizontalAlignment" Value="Left"></Setter>
</Style>
<DataTemplate x:Key="comboKEY">
<Grid Height="25" Width="300" ShowGridLines="false">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0"></ColumnDefinition>
<ColumnDefinition Width="200"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Path='id'}"
Style="{StaticResource txtStyle}"></TextBlock>
<TextBlock Grid.Column="1" Text="{Binding Path='site_name'}"
Style="{StaticResource txtStyle}"
TextWrapping="Wrap"></TextBlock>
</Grid>
</DataTemplate>
XAML 组合框
<WrapPanel Orientation="Horizontal" Canvas.Left="10" Canvas.Top="90">
<ComboBox IsEditable="True"
Width="200"
Height="25"
IsTextSearchEnabled="False"
x:Name="cboName"
ItemTemplate="{StaticResource comboKEY
ItemsSource="{Binding}" SelectionChanged="cboName_SelectionChanged">
</ComboBox>
</WrapPanel>
代码隐藏
private void cboName_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
cboName.Text = dt.Rows[cboName.SelectedIndex]["dt_field"].ToString();
test1.Content = dt[cboName.SelectedIndex]["dt_field"].ToString();
}
【问题讨论】:
-
我不清楚您要做什么。您想根据输入到 ComboBox 文本字段中的文本过滤 ComboBox 中建议的项目吗?那么多列部分呢? ComboBox 绑定到什么?
-
它绑定到一个数据表。所以它充满了物品让我们说ID |名字 | LASTNAME,当我输入它时,可以说 LASTNAME 过滤结果。在我的示例中,它返回一行,但如何告诉它显示特定字段。