Có thể sử dụng phương pháp ObjectDataProvider để ràng buộc một ListBox vào một enum, và phong cách nó bằng cách nào đó để hiển thị mô tả attriibute? Nếu vậy thì làm thế nào một người sẽ làm được điều này ...?WPF Ràng buộc một ListBox vào một enum, hiển thị các thuộc tính mô tả
Trả lời
Có, điều đó là có thể. Điều này sẽ làm điều đó. Giả sử chúng ta có enum
public enum MyEnum
{
[Description("MyEnum1 Description")]
MyEnum1,
[Description("MyEnum2 Description")]
MyEnum2,
[Description("MyEnum3 Description")]
MyEnum3
}
Sau đó chúng ta có thể sử dụng ObjectDataProvider như
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>
Và đối với ListBox chúng tôi đặt ItemsSource để MyEnumValues và áp dụng một ItemTemplate với một chuyển đổi.
<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>
Và trong bộ chuyển đổi chúng tôi nhận được mô tả và gửi lại
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;
}
}
Phương pháp GetEnumDescription có lẽ nên đi ở một nơi khác nhưng bạn sẽ có được ý tưởng :)
Nếu bạn liên kết với Enum, bạn có thể chuyển đổi mô hình này thành mô tả thông qua IValueConverter.
Xem Binding ComboBoxes to enums... in Silverlight! để biết mô tả về cách thực hiện việc này.
Xem http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx để biết thêm thông tin.
Bạn có thể định nghĩa một tập tin ressource trong dự án của bạn (* .resx file). Trong tập tin này, bạn phải xác định "giá trị khóa cặp", một cái gì đó như thế này:
"YellowCars" : "Yellow Cars",
"RedCars" : "Red Cars",
và vân vân ...
Các phím được tương đương với enum-mục của bạn, một cái gì đó như thế này:
public enum CarColors
{
YellowCars,
RedCars
}
và vân vân ...
Khi bạn sử dụng WPF bạn có thể thực hiện trong bạn XAML-Mã, một cái gì đó như thế này:
<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>
Sau đó, bạn phải viết Chuyển đổi của bạn, một cái gì đó như thế này:
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();
}
}
câu trả lời của tôi đến 7 năm đến cuối ;-) Nhưng có lẽ nó có thể được sử dụng bởi người khác!
- 1. Dữ liệu ràng buộc các thuộc tính enum thành lưới và hiển thị mô tả
- 2. Ràng buộc ListBox với ViewModel trong WPF
- 3. hiển thị mô tả Enum trong jqGrid thay vì Enum
- 4. Bản địa hóa các thuộc tính mô tả enum
- 5. Cách hiển thị mô tả lớp học, mô tả thuộc tính và mô tả hoạt động của jmx MBeans
- 6. Ràng buộc một DataFrid WPF vào một DataTable
- 7. Ràng buộc thuộc tính IsSelected của ListBoxItem vào một thuộc tính trên đối tượng từ nguồn của nó
- 8. OneWay ràng buộc cho thuộc tính IsChecked ToggleButton trong WPF
- 9. Biểu tượng Ràng buộc phụ thuộc vào Enum trong WPF TreeView
- 10. WPF ràng buộc thuộc tính của usercontrol vào thuộc tính của cha mẹ
- 11. Ràng buộc vào một cấu trúc
- 12. WPF: Tự động ràng buộc danh sách (một số) thuộc tính của đối tượng
- 13. Hiển thị nhiều loại từ một danh sách duy nhất trong một ListBox WPF?
- 14. Ràng buộc một ComboBox vào một enum lồng trong một lớp học
- 15. Hiển thị các ràng buộc trong một bảng
- 16. Tìm một giá trị enum bởi thuộc tính mô tả của nó
- 17. Automapper: Bản đồ một Enum tới [Mô tả] của nó thuộc tính
- 18. Ràng buộc WPF và Phân công động Thuộc tính StringFormat
- 19. Ràng buộc Trình kích hoạt kiểu WPF vào thuộc tính phụ thuộc tùy chỉnh
- 20. Ràng buộc một thuộc tính chuỗi dữ liệu văn bản vào một khóa StaticResource
- 21. Thuộc tính cha mẹ ràng buộc WPF trong HierarchicalDataTemplate
- 22. hiển thị thuộc tính tiêu đề html với mô tả trường Flask-WTForms
- 23. Ràng buộc một TypeConverter trực tiếp vào một liệt kê
- 24. radiobuttons ràng buộc nhóm để sở hữu một trong WPF
- 25. Ràng buộc một tham số hiển thị vào câu lệnh 'hoặc' trong Knockout
- 26. Ràng buộc thuộc tính "WindowState" của một cửa sổ trong WPF bằng cách sử dụng MVVM
- 27. WPF Làm thế nào để ràng buộc một enum thiệu đến một combobox
- 28. Buộc TextBlock để bọc trong WPF ListBox
- 29. Cách hiển thị các thuộc tính enum cho máy khách WCF
- 30. Silverlight DataGridTextColumn Hiển thị ràng buộc
Bản sao có thể có của http://stackoverflow.com/questions/1281490/binding-comboboxes-to-enums-in-silverlight. –