Zeigen Enum Beschreibung Statt Name
Hatte ich databinding wie folgt eingerichtet:
ItemsSource="{Binding Source={my:Enumeration {x:Type credit:OccupationCategory}}}"
DisplayMemberPath="Description"
SelectedValue="{Binding EmplType}"
SelectedValuePath="Value"/>
und es funktionierte wirklich gut. Tun, um eine änderung in der größeren software-design kann ich nichts mehr haben, das erzeugt eine INotifyPropertyChanged Event, so dass Art von databinding funktioniert nicht. Stattdessen bin ich das manuelle festlegen der selectedIndex-Eigenschaft und Gebäude die Optionen von code wie dieser:
ItemsSource="{Binding Source={StaticResource ResidenceOwnershipType}}"/>
Referenzen
<UserControl.Resources>
<ObjectDataProvider x:Key="ResidenceOwnershipType" MethodName="GetValues" ObjectType="{x:Type System:Enum}" >
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="credit:ResidenceOwnershipType" />
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</UserControl.Resources>
Funktioniert, wie weit das Gebäude von der Liste der Optionen betroffen ist und die Verknüpfung aller meiner Daten, aber ich kann nicht die comboboxes zu zeigen, das description-tag in der enumeration anstelle des eigentlichen Textes.
Habe ich versucht, so etwas wie dieses:
DisplayMemberPath="Description"
aber das war so nicht richtig. Wie würde ich gehen über das tun dies?
EDIT:
Mein Enum:
[DataContract]
public enum ResidenceOwnershipType
{
[Description("")]
None = 0,
[Description("Owns Home Outright")]
OwnsHomeOutright = 1,
[Description("Buying Home")]
BuyingHome = 2,
[Description("Renting/Leasing")] //Weird order here reflects RouteOne website
RentingLeasing = 4,
[Description("Living w/Relatives")]
LivingWithRelatives = 3,
[Description("Owns/Buying Mobile Home")]
MobileHome = 5,
[Description("Unknown")]
Unknown = 6
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie halten diese
ItemsSource
haben Sie, um eine benutzerdefinierteItemTemplate
alsDisplayMemberPath
ist nur ein Pfad, über die Sie nicht in der Lage zum abrufen der Beschreibung.Als für das, was die Vorlage sollte wie folgt Aussehen: Sie binden können, einem
TextBlock
auf den enum-Wert (der aktuelleDataContext
) und Rohr, die durch einValueConverter
mitBinding.Converter
. Der code würde so eine Reflexion zum abrufen derDescription
(GetType
,GetCustomAttributes
etc.)Alternativen sind eine eigene Methode, die eine brauchbare Sammlung gleich (und wird in der
ObjectDataProvider
) oder eine benutzerdefinierte markup-Erweiterung die nicht die gleiche Sache.Methode Beispiel wenn wir reden über ein
ComponentModel.DescriptionAttribute
:ObjectDataProvider
(custom markup extensions sind die Lösungen zu den meisten meiner XAML-Probleme).my:Enumeration
markup-Erweiterung)Diese Antwort ist eine Ergänzung, die auf H. B. ' s Antwort, die ich umgesetzt für meine eigene Anwendung:
Überprüfen Sie, ob das Attribut "Description" Hinzugefügt:
Und Legen Sie die folgenden Eigenschaften, um sicherzustellen, dass die korrekte ID ' s verwendet werden:
SelectedValuePath="Value"