WPF 将列表框绑定到枚举,显示描述属性
是否可以使用 ObjectDataProvider 方法将 ListBox 绑定到枚举,并以某种方式设置其样式以显示“描述”属性?如果是这样,人们将如何去做这件事......?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
是否可以使用 ObjectDataProvider 方法将 ListBox 绑定到枚举,并以某种方式设置其样式以显示“描述”属性?如果是这样,人们将如何去做这件事......?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
是的,这是可能的。这样就可以了。假设我们有枚举
,那么我们可以使用 ObjectDataProvider 作为
ListBox,我们将 ItemsSource 设置为 MyEnumValues 并应用带有转换器的 ItemTemplate。
在转换器中,我们获取描述并返回它
GetEnumDescription 方法可能应该去其他地方,但你明白了:)
检查 GetEnumDescription 作为扩展方法。
Yes, it is possible. This will do it. Say we have the enum
Then we can use the ObjectDataProvider as
And for the ListBox we set the ItemsSource to MyEnumValues and apply an ItemTemplate with a Converter.
And in the converter we get the description and return it
The GetEnumDescription method should probably go somewhere else but you get the idea :)
Check GetEnumDescription as extension method.
另一个解决方案是自定义 MarkupExtension 从枚举类型生成项目。这使得 xaml 更加紧凑和可读。
使用示例:
MarkupExtension 实现
Another solution would be a custom MarkupExtension that generates the items from enum type. This makes the xaml more compact and readable.
Example of usage:
MarkupExtension implementation
如果您绑定到枚举,您可能可以通过 IValueConverter 将其转换为描述。
有关如何操作的说明,请参阅将组合框绑定到枚举...在 Silverlight 中!来实现这一目标。
请参阅 http://msdn.microsoft.com/en -us/library/system.windows.data.ivalueconverter.aspx 了解更多信息。
If you bind to the Enum, you could probably convert this to the description through an IValueConverter.
See Binding ComboBoxes to enums... in Silverlight! for a description on how to accomplish this.
See http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx for more information.
您可以在项目中定义资源文件(*.resx 文件)。在此文件中,您必须定义“键值对”,如下所示:
等等...
键等于您的枚举条目,如下所示:
等等...
当您使用 WPF 时,您可以在你的 XAML 代码中实现,像这样:
然后你必须编写你的转换器,像这样:
我的答案迟到了 7 年;-) 但也许它可以被其他人使用!
You can define a ressource file in your project (*.resx file). In this file you must define "key-value-pairs", something like this:
and so on...
The keys are equals to your enum-entries, something like this:
and so on...
When you use WPF you can implement in your XAML-Code, something like this:
Then you must write your Converter, something like this:
My answer comes 7 years to late ;-) But maybe it can be used by someone else!
是的,有可能。
ListBox
可以帮助我们做到这一点,无需转换器。该方法的步骤如下:
创建一个 ListBox 并将列表框的 ItemsSource 设置为枚举,并将 ListBox 的 SelectedItem 绑定到选定的属性。
然后将创建每个ListBoxItem。
然后将以下属性添加到您的DataContext(或MVVM的ViewModel)中,该属性记录了选中的所选项目。
参考:
https://www.codeproject.com/Articles/ 130137/Binding-TextBlock-ListBox-RadioButtons-to-Enums
Yeah, possible.
ListBox
can help us do that, without converters.The steps of this method are below:
create a ListBox and set the ItemsSource for the listbox as the enum and binding the SelectedItem of the ListBox to the selected property.
Then each ListBoxItem will be created.
Then add below property to your DataContext (or ViewModel of MVVM), which records the selected item which is checked.
References:
https://www.codeproject.com/Articles/130137/Binding-TextBlock-ListBox-RadioButtons-to-Enums
这里的示例应用于 ComboBox,但对于任何枚举绑定都同样有效。
来源:
此 anwser 基于 Brian Lagunas 的 EnumBindingSourceExtension + EnumDescriptionTypeConverter。
我对其进行了修改以更好地满足我的需要。
我更改的内容:
使用布尔函数扩展了 Enum 类,该函数检查 EnumValue 是否具有 [Description] 属性
修改了 Brian 在“EnumDescriptionTypeConverter”中的“ConvertTo()”函数,以在 [Description] 属性不存在时返回“null”已应用
通过调用 my 来编辑其返回值,修改了“EnumBindingSourceExtension”中的 Brian 的“ProvideValue()”函数自己的功能
并添加我的函数以按索引对枚举进行排序(原始代码在跨项目时出现问题..),并删除任何没有 [Description] 属性的值:
此示例已应用于 ComboBox:
注意:将图像上传到服务器失败,因此我向相关图像添加了 URL
代码如下:
“ConversionPreset”枚举和 渲染的 ComboBox 图片
输出”枚举和 渲染的 ComboBox 图片
The example here is applied to a ComboBox, but will work all the same for any Enum Binding.
Origin:
This anwser is based on the original work of Brian Lagunas' EnumBindingSourceExtension + EnumDescriptionTypeConverter.
I have made modifications for it to better suit my needs.
What I changed:
Extended the Enum class with a boolean function that checks if the EnumValue has the [Description] attribute or not
Modified Brian's "ConvertTo()" function in "EnumDescriptionTypeConverter" to return "null" in case the [Description] attribute was not applied
Modified Brian's "ProvideValue()" function in "EnumBindingSourceExtension" by editing it's return value by calling my own function
And adding my function to Sort the enum by Index (Original code had problems when going across Projects ..), and Strip out any Values that don't have the [Description] attribute:
This example has been applied to ComboBoxes:
Note: Failures in Uploading images to the Server, so i added a URL to the images in question
With code behind:
The "ConversionPreset" Enum and a Picture of the ComboBox Rendered
The "Output" Enum and a Picture of the ComboBox Rendered