WPF Combobox在下拉列表中显示实体名称而不是DisplayMemberPath

时间:2012-10-23 11:30:03

标签: wpf combobox

我有以下组合框:

<ComboBox Name="cbBonusType" 
          DisplayMemberPath="BonusTypeName"  
          SelectedValuePath="ID" Width="150" Margin="10,0,0,0"                  
          SelectionChanged="cbBonusType_SelectionChanged"/>

运行时: 选择项目时,组合框会显示正确的字符串。 但是当droppbox打开时,droppbox中显示的名称 all 设置为实体的名称:“CaSaMa.WPF.UI.Competiotion.BonusType”。

为什么会这样,我该如何解决?

2 个答案:

答案 0 :(得分:4)

最好的选择是覆盖对象上的ToString - 这样可以在整个应用程序中显示一致的显示。

希望有所帮助!

重新阅读你的问题 - 想想我得到了错误的结局..你可以做的是在控件上设置ItemTemplate而不是像这样;

      <ComboBox Name="cbBonusType" 
      ItemTemplate="{StaticResource DisplayTemplate}"
      SelectedValuePath="ID" Width="150" Margin="10,0,0,0"                  
      SelectionChanged="cbBonusType_SelectionChanged"/>

然后像这样创建模板

    <DataTemplate x:Key="DisplayTemplate"
          DataType="{x:Type <YOURTYPE>}">
     <TextBlock Text="{Binding BonusTypeName}"/>
    </DataTemplate>

这是一个众所周知的问题,这是遗憾的解决方法!

希望这有帮助......这一次! :)

编辑:更新代码只是因为其他人想要使用它!

STE。

答案 1 :(得分:0)

比XAML更容易......

<ComboBoxItem Content="This Value" Tag="This Value"/>

然后在代码背后:

GetValue=ComboBoxName.selecteditem.tag.tostring()

GetValue将是“This Value”而不是 “System.Windows.Controls.ComboBoxItem:This Value”