c# – 显示枚举描述而不是名称
发布时间:2020-12-15 18:00:25 所属栏目:百科 来源:网络整理
导读:我有这样的数据绑定设置: ItemsSource="{Binding Source={my:Enumeration {x:Type credit:OccupationCategory}}}" DisplayMemberPath="Description" SelectedValue="{Binding EmplType}" SelectedValuePath="Value"/ 它工作得很好.对更大的软件设计进行更改
我有这样的数据绑定设置:
ItemsSource="{Binding Source={my:Enumeration {x:Type credit:OccupationCategory}}}" DisplayMemberPath="Description" SelectedValue="{Binding EmplType}" SelectedValuePath="Value"/> 它工作得很好.对更大的软件设计进行更改我不能再生成任何生成INotifyPropertyChanged事件的内容,因此数据绑定类型不起作用.相反,我手动设置selectedIndex并从代码构建选项,如下所示: ItemsSource="{Binding Source={StaticResource ResidenceOwnershipType}}"/> 哪些参考 <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> 就列表选项的构建和所有数据的链接而言,这是有效的,但我无法让组合框在枚举中显示描述标记而不是实际文本. 我尝试过这样的事情: DisplayMemberPath="Description" 但这不正确.我该怎么做呢? 编辑: 我的枚举: [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 } 解决方法
如果保留此ItemsSource,则必须定义自定义
ItemTemplate ,因为DisplayMemberPath只是您无法检索描述的路径.
至于模板应该是什么样的:你可以使用Binding.Converter将TextBlock绑定到枚举值(当前的DataContext)和通过 替代方案是一种自定义方法,可以立即返回可用的集合(并在ObjectDataProvider中使用)或自定义markup extension,它可以执行相同的操作. 方法示例如果我们正在讨论ComponentModel.DescriptionAttribute: public static class EnumUtility { // Might want to return a named type,this is a lazy example (which does work though) public static object[] GetValuesAndDescriptions(Type enumType) { var values = Enum.GetValues(enumType).Cast<object>(); var valuesAndDescriptions = from value in values select new { Value = value,Description = value.GetType() .GetMember(value.ToString())[0] .GetCustomAttributes(true) .OfType<DescriptionAttribute>() .First() .Description }; return valuesAndDescriptions.ToArray(); } } <ObjectDataProvider x:Key="Data" MethodName="GetValuesAndDescriptions" ObjectType="local:EnumUtility"> <ObjectDataProvider.MethodParameters> <x:TypeExtension TypeName="local:TestEnum" /> </ObjectDataProvider.MethodParameters> </ObjectDataProvider> <ListBox ItemsSource="{Binding Source={StaticResource Data}}" DisplayMemberPath="Description" SelectedValuePath="Value"/> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |