无论选择什么,ComboBox都会显示System.Data.DataRowView。 ItemTemplate问题

时间:2018-04-17 20:20:24

标签: c# wpf xaml mvvm

我有一个ComboBox需要在它的下拉列表中显示多个字段。但只想存储一个。现在它可以显示多个字段。但无论我选择什么,文本框中显示的值都是“System.Data.DataRowView”。有谁知道为什么会这样或如何解决它?

<ComboBox ItemsSource="{Binding Vwr.Table.Tbl, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
  x:Name="Supplier"
  SelectedValuePath="Name"
  SelectedValue="Name"
  IsEditable="True" Style="{StaticResource tabTextBox}"
    DataContext="{Binding parties}">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectionChanged">
            <i:InvokeCommandAction Command="{Binding SupplierChangedCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock>
                <TextBlock.Text>
                    <MultiBinding StringFormat="{}{0}: {1}: {2}">
                        <Binding Path="Name"/>
                        <Binding Path="Funds"/>
                        <Binding Path="Terms"/>
                    </MultiBinding>
                </TextBlock.Text>
            </TextBlock>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

1 个答案:

答案 0 :(得分:2)

在这里找到答案:http://www.shujaat.net/2010/08/wpf-editable-combobox-with-datatemplate.html

解决方案是设置TextSearch.TextPath。就我而言,它是

TextSearch.TextPath="Name"

更新我的原始代码(为简洁起见,删除了不必要的部分),工作版本在这里

<ComboBox 
  x:Name="Supplier"
  ItemsSource="{Binding Vwr.Table.Tbl}"
  SelectedValuePath="Name"
  SelectedValue="Name"
  IsEditable="True" Style="{StaticResource tabTextBox}"
  TextSearch.TextPath="Name"
  DataContext="{Binding parties}">

希望这可以帮助那些人!