在WPF中搜索comboBox,显示两列

时间:2013-10-29 11:12:17

标签: c# wpf mvvm combobox

我必须在WPF comboBox中启用搜索,在我的WPF MVVM应用程序中显示两列。

下面是我的代码,它显示了两个列,如:名字 - 姓氏

    <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没有扮演任何角色。

对此有何帮助?

2 个答案:

答案 0 :(得分:4)

在这种情况下,您可以使用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>

答案 1 :(得分:-1)

你似乎有些困惑。首先,您ComboBox中显示两列,您显示两个字段值...也许您应该编辑误导性标题?

其次,我不相信您完全理解IsTextSearchEnabled属性的使用。但是,正确使用此属性是正确的。来自MSDN上的ItemsControl.IsTextSearchEnabled Property页:

  

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

来自MSDN上的TextSearch Class页:

  

此类用于将字符串分配给控件集合中的项目。为集合中的每个项目分配一个字符串可实现两个目标。它指定选择项目时要显示的文本,并使用户可以通过键入指定的字符串来选择项目。

     

例如,假设ComboBox包含Image对象的集合,其中一个是Dog的图像。如果您为该项目分配字符串“Dog”,则用户可以通过在组合框的文本框中键入单词来选择狗。一旦用户键入足够的单词以将其与选择中的其他项区分开,将选择狗的图像。如果在ComboBox上将IsEditable设置为true,则“Dog”将出现在文本框中。

     

您可以通过在控件上使用TextSearch.TextPath属性或通过在控件集合中的每个项目上设置Text属性来指定标识项目的文本。设置其中一个属性可确保不显示意外文本。如果在控件的集合项上设置Text属性,则将忽略TextPath属性。如果将TextPath属性设置为不是实际属性名称的值,则忽略TextPath。