无法在组合框中的选定项目上显示DataTemplate?

时间:2015-08-29 21:33:06

标签: wpf xaml combobox

新手问题。在下面的组合框中,下拉列表会根据DataTemplate正确显示公司名称和电话号码。但是,从下拉列表中选择一个项目(通过鼠标)仅在显示对象名称时重新开始:

  Stargate_V.DataService.View_Small_Company

未显示所选公司名称和电话号码。我做错了什么?

 <ComboBox 
  ItemsSource="{Binding PrimaryInsurance.Companies}"
  ItemTemplate="{StaticResource CompanyTemplate}"
  IsEditable="True"
  IsTextSearchEnabled="True"              
  Height="20" HorizontalAlignment="Left" Margin="375,235,0,0" VerticalAlignment="Top" Width="198"  />

CompanyTemplate是:

<DataTemplate x:Key="CompanyTemplate">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Companyname}" Width="240"/>
                <TextBlock Text="|" Width="10"/>
                <TextBlock Text="{Binding Phone}" Width="80" />
            </StackPanel>
        </DataTemplate>

TIA

1 个答案:

答案 0 :(得分:1)

您遇到的问题是将复杂类型(即Class)与 DataTemplate 结合使用, ComboBox 具有 IsEditable 设为true。将 IsEditable 设置为true时, ComboBox 不知道要用于搜索的属性,因此只需在对象上调用 ToString 并显示结果。要解决此问题,您需要将 TextSearch.TextPath 设置为要用于搜索的对象的属性名称。完成后,它将在选择框中显示该属性,而不是 ToString 的结果。如果您要搜索对象上的 Companyname 属性,则下面是您的XAML应该是什么样子。

<ComboBox 
  ItemsSource="{Binding PrimaryInsurance.Companies}"
  ItemTemplate="{StaticResource CompanyTemplate}"
  IsEditable="True"
  IsTextSearchEnabled="True"
  TextSearch.TextPath="Companyname"              
  Height="20" HorizontalAlignment="Left" Margin="375,235,0,0" VerticalAlignment="Top" Width="198"  />