是否可以使用ObjectDataProvider方法將ListBox綁定到枚舉,並以某種方式顯示描述屬性?如果是這樣,怎麼會這樣做...?WPF將ListBox綁定到枚舉,顯示Description屬性
30
A
回答
79
是的,這是可能的。這將做到這一點。假設我們有枚舉
public enum MyEnum
{
[Description("MyEnum1 Description")]
MyEnum1,
[Description("MyEnum2 Description")]
MyEnum2,
[Description("MyEnum3 Description")]
MyEnum3
}
然後我們可以使用ObjectDataProvider的作爲
xmlns:MyEnumerations="clr-namespace:MyEnumerations"
<ObjectDataProvider MethodName="GetValues"
ObjectType="{x:Type sys:Enum}"
x:Key="MyEnumValues">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="MyEnumerations:MyEnum" />
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
併爲我們設置的ItemsSource到MyEnumValues列表框和一個轉換器適用於一個ItemTemplate。
<ListBox Name="c_myListBox" SelectedIndex="0" Margin="8"
ItemsSource="{Binding Source={StaticResource MyEnumValues}}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource EnumDescriptionConverter}}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
而在轉換器我們得到了描述,並返回其
public class EnumDescriptionConverter : IValueConverter
{
private string GetEnumDescription(Enum enumObj)
{
FieldInfo fieldInfo = enumObj.GetType().GetField(enumObj.ToString());
object[] attribArray = fieldInfo.GetCustomAttributes(false);
if (attribArray.Length == 0)
{
return enumObj.ToString();
}
else
{
DescriptionAttribute attrib = attribArray[0] as DescriptionAttribute;
return attrib.Description;
}
}
object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
Enum myEnum = (Enum)value;
string description = GetEnumDescription(myEnum);
return description;
}
object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return string.Empty;
}
}
的GetEnumDescription方法或許應該去別的地方,但你的想法:)
2
如果綁定到Enum,則可以通過IValueConverter將其轉換爲描述。
有關如何完成此操作的說明,請參閱Binding ComboBoxes to enums... in Silverlight!。
查看http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx瞭解更多信息。
0
您可以定義的ressource文件在你的項目中(* .resx文件)。在這個文件中,你必須定義「鍵 - 值對的」,這樣的事情:
"YellowCars" : "Yellow Cars",
"RedCars" : "Red Cars",
等等...
是等於你的枚舉項中的按鍵,這樣的事情:
public enum CarColors
{
YellowCars,
RedCars
}
等等...
當您使用WPF,你可以在你的XAML的代碼實現,這樣的事:
<ComboBox ItemsSource="{Binding Source={StaticResource CarColors}}" SelectedValue="{Binding CarColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource CarColorConverter}}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
然後你必須寫你的轉換器,這樣的事情:
using System;
using System.Globalization;
using System.Resources;
using System.Windows.Data;
public class CarColorConverter : IValueConverter
{
private static ResourceManager CarColors = new ResourceManager(typeof(Properties.CarColors));
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var key = ((Enum)value).ToString();
var result = CarColors.GetString(key);
if (result == null) {
result = key;
}
return result;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
我的回答談到7年後期;-)但也許它可以被別人使用!
相關問題
- 1. 得到Description屬性枚舉
- 2. Silverlight - 綁定到枚舉屬性
- 3. 如何將usercontrol屬性綁定到Listbox
- 4. 將標誌枚舉綁定到控件並返回枚舉屬性
- 5. WPF數據綁定枚舉
- 6. WPF數據綁定枚舉
- 7. 基於枚舉的綁定屬性
- 8. 綁定枚舉屬性值ListView.Items(的WinForms)
- 9. Wpf ListViewItem背景綁定到枚舉
- 10. WPF綁定枚舉到命令參數
- 11. 如何將一個屬性綁定到靜態枚舉值?
- 12. 數據綁定一個枚舉屬性的組合框在WPF
- 13. 如何將ListBoxItem的屬性綁定到已綁定到ListBox的ItemsSource的屬性
- 14. WPF工具包屬性框不顯示可爲空枚舉
- 15. 將枚舉數據綁定到WPF中的ComboBox,篩選一些枚舉
- 16. WPF綁定到Listbox selectedItem
- 17. WPF ListBox:綁定到ObservableCollection
- 18. 將WPF ListBox SelectedItem綁定到列表
- 19. WPF將數據綁定到ListBox多列
- 20. WPF DataGridComboboxColumn沒有獲得屬性(值從數據庫)綁定到枚舉
- 21. 無法將WPF TextBlock綁定到屬性
- 22. WPF綁定屬性到Datagrid
- 23. WPF綁定到UserControl屬性
- 24. WPF:綁定到MainWindow屬性
- 25. 使用Description屬性修飾EF對象模型的枚舉?
- 26. 綁定到WPF屬性的屬性
- 27. 將ComboBox的SelectedValue綁定到WPF中枚舉
- 28. 將枚舉數據綁定到WPF + MVVM中的組合框中
- 29. 如何將枚舉ItemsControl綁定到WPF中的集合?
- 30. 將枚舉綁定到WPF控件(如Combobox,TabHeader等)的方法
可能的重複http://stackoverflow.com/questions/1281490/binding-comboboxes-to-enums-in-silverlight。 – 2010-10-21 10:11:11