今日、Googleのこの問題は、ああ、本当に古典的です外国でのソリューションの多くが見つかりました:
まず、コンバータを結合することにより:
公共の密封されたクラスEnumToNamesConverter:IValueConverter { オブジェクトIValueConverter。変換(オブジェクト値、タイプたtargetType 、オブジェクトパラメータ、のCultureInfoの培養){ 戻り列挙します。getNames(値。メソッドGetType())。} オブジェクトIValueConverterを。ConvertBack(オブジェクトの値、タイプたtargetType 、
オブジェクトパラメータ、のCultureInfoの培養){ スロー新しい非サポート例外()} }
XAML
<ローカル:EnumToNamesConverter X:キー = "EnumToNamesConverter" />
<コンボボックスのItemsSource = "{バインディング ソース= {X:タイプローカル:CompassHeading}、 コンバータ= {StaticResource EnumToNamesConverter}}" />
第二に、古典的なああ!相続MarkupExtensionを通じ
[ MarkupExtensionReturnType(typeof演算(オブジェクト []))] パブリッククラスEnumValuesExtension:MarkupExtension { パブリックEnumValuesExtension(){ } 公共EnumValuesExtension(タイプ enumType ){ この。EnumType = enumType 。} [ ConstructorArgument("enumType")] パブリックタイプEnumType { 得ます。セット ; }
公共オーバーライドオブジェクトProvideValue(IServiceProviderサービス・プロバイダ){ 場合(これ。EnumType == nullの)スロー新しいArgumentExceptionがする("列挙型が設定されていません"); 返す列挙型を。でgetValues(これ。EnumType); } }
XAML
<コンボボックスのItemsSource = "{ローカル:ローカルEnumValues:はEmployeeType}" />
ます。https://www.cnblogs.com/sofire/archive/2010/03/19/1690111.htmlで再現