在WPF组合框中搜索并显示两列

4

我需要在我的WPF MVVM应用程序中启用搜索功能,该应用程序的comboBox显示两列。

以下是显示两列的代码:名字 - 姓氏

    <ComboBox Grid.Column="3" Grid.Row="15" Height="Auto" HorizontalAlignment="Stretch" 
                Name="cmbName" VerticalAlignment="Stretch"
                SelectedItem="{Binding Name, Mode=TwoWay}"
                ItemsSource="{Binding GetAllName}"
                IsTextSearchEnabled="True">

        <ComboBox.ItemTemplate>
            <DataTemplate>
                <TextBlock DataContext="{Binding}">
                        <TextBlock.Text>
                            <MultiBinding StringFormat="{}{0} - {1}">
                                <Binding Path="FirstName" />
                                <Binding Path="LastName" />
                            </MultiBinding>
                        </TextBlock.Text>
                </TextBlock>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>

我认为在这种情况下,IsTextSearchEnabled没有起到任何作用。
需要帮助吗?

"我必须启用搜索" - 您想要实现哪种搜索功能?您是否希望根据组合框中的选择在ListView或其他控件中过滤数据? - Animus Miles-Militis
2个回答

6
在这种情况下,您可以使用TextSearch.TextPath。
<ComboBox Grid.Column="3" Grid.Row="15" Height="Auto" HorizontalAlignment="Stretch" 
                Name="cmbName" VerticalAlignment="Stretch"
                SelectedItem="{Binding Name, Mode=TwoWay}"
                ItemsSource="{Binding GetAllName}">
        <TextSearch.TextPath>FirstName</TextSearch.TextPath>
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <TextBlock DataContext="{Binding}">
                        <TextBlock.Text>
                            <MultiBinding StringFormat="{}{0} - {1}">
                                <Binding Path="FirstName" />
                                <Binding Path="LastName" />
                            </MultiBinding>
                        </TextBlock.Text>
                </TextBlock>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>

这就是我一直在寻找的。谢谢。 - user2519971

-2

您似乎有些困惑。首先,您并没有在ComboBox中显示两列,而是显示了两个字段值...也许您应该编辑一下误导性的标题?

其次,我不认为您完全理解IsTextSearchEnabled属性的用途。但是,您使用这个属性的方式确实没有任何作用。从MSDN上的ItemsControl.IsTextSearchEnabled Property页面中可以看到:

获取或设置一个值,该值指示是否在ItemsControl实例上启用TextSearch。

从MSDN上的TextSearch Class页面中可以看到:

这个类用于将字符串分配给控件集合中的项目。为集合中的每个项目分配一个字符串可以实现两个目标。它指定了在选择该项目时要显示的文本,并使用户能够通过键入分配的字符串来选择项目。
例如,假设ComboBox包含一组Image对象,其中之一是狗的图像。如果您将字符串“Dog”分配给该项,则用户可以通过在组合框的文本框中键入该单词来选择狗。一旦用户键入足够区分其与选择中的其他项目的单词,狗的图像将被选中。如果ComboBox上的IsEditable设置为true,“Dog”将出现在文本框中。
您可以使用TextSearch.TextPath属性在控件上或通过设置控件集合中每个项目的Text属性来指定标识项目的文本。设置其中一个属性可确保不会显示意外的文本。如果您在控件的集合项上设置Text属性,则将忽略TextPath属性。如果您将TextPath属性设置为非实际属性名称的值,则将忽略TextPath。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接