2012-10-23 46 views
0

WPF組合框顯示實體名稱,我有以下組合框:在下拉菜單代替的DisplayMemberPath

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

在運行時: 當選擇一個項目,組合框恰好顯示了正確的字符串。 但是,當dropbox打開時,在droppbox中顯示的名稱是全部設置爲實體的名稱:「CaSaMa.WPF.UI.Competiotion.BonusType」。

這是爲什麼,如何解決?

+0

您的Itemssource在哪裏以及它的外觀如何? – KroaX

+1

「BonusTypeName」屬性的類型是什麼?串? 'CaSaMa.WPF.UI.Competiotion.BonusType'? –

+0

你是否在任何地方覆蓋'ComboBox.ItemTemplate'? – Rachel

回答

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。

+0

哇!非常感謝!這工作完美! 如果你可以編輯你的答案,也許你可以改變模板,所以它說「{x:Type Combobox}」而不是BonusType,以防其他人想要使用相同的解決方案。 :-) 再次感謝你sooo多。 :-) Keren – Keren

+0

@Keren沒有問題,很高興幫助 - Datatype標記只是允許您在綁定時查看類型的屬性。由於這個答案似乎解決了它 - 你能把它標記爲Accepted嗎? – Steoates

0

它的方式比這更簡單...在XAML:

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

然後在後面的代碼:

GetValue=ComboBoxName.selecteditem.tag.tostring() 

的GetValue將 「此值」,而不是 「System.Windows.Controls .ComboBoxItem:此值「