Как отобразить дружественное имя enum в сетке данных WPF

1

Я заметил, что WPF DataGrid по умолчанию показывает имя Enum. Отлично. Но есть ли способ показать более дружелюбное имя? т.е. без этих подчеркиваний в моем случае?

Изображение 174551

void ResultGrid_AutoGeneratingColumns(object sender, DataGridAutoGeneratingColumnEventArgs e)
        {


            if (e.Column.GetType() == typeof(DataGridComboBoxColumn))
            {
                var binding = (e.Column as DataGridComboBoxColumn).TextBinding.StringFormat(...);
              //  binding.Converter = new EnumConverter();
            }
        }
  • 0
    Это может помочь вам начать работу - stackoverflow.com/a/11440293/632337 .
  • 0
    Суть в том, чтобы установить атрибут Description над enum и получить его либо с помощью IValueConverter либо с помощью ObjectDataProvider как указано в примере выше.
Показать ещё 4 комментария
Теги:
wpf
datagrid

1 ответ

2

Вы можете написать пользовательский IValueConverter, чтобы принять значение перечисления и вернуть дружественную строку. Это просто заменяет простую строку.

public class GeneralEnumConverter : IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value != null && value.GetType().IsEnum)
        {
            return this.FormatEnumName(value.ToString());
        }

        return null;
    }

    private string FormatEnumName(string enumName)
    {
        return enumName.Replace('_', ' ');
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

Тогда вашему XAML понадобится ресурс:

<UserControl.Resources>
    <Converter:GeneralEnumConverter x:Key="GeneralEnumConverter"/>
</UserControl.Resources>

Вам нужно будет определить Конвертер в корневом элементе XAML и указать его в пространство имен для вашего конвертера. Это намного проще, если сделать это в Blend/Visual Studio XAML Designer, поскольку вы можете создать новый конвертер из меню "Создать привязку".

Затем примените конвертер к вашей привязке...

<Label x:Name="label" Content="{Binding Tag, Converter={StaticResource GeneralEnumConverter}, ElementName=label}" />

Это хакерская привязка метки к себе, важной частью является атрибут Converter =.

Надеюсь это поможет.

Пожалуйста, отметьте как ответ, если да.

  • 0
    Нет, это означает, что я должен указать конвертер для каждого свойства по одному. Я ищу способ изменить, как перечисления представлены по всем направлениям. Даже если это означает переопределение DataGrid, я в порядке с этим.
  • 0
    У вас есть только два списка, каковы все свойства?
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню