Я заметил, что WPF DataGrid по умолчанию показывает имя Enum. Отлично. Но есть ли способ показать более дружелюбное имя? т.е. без этих подчеркиваний в моем случае?
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();
}
}
Вы можете написать пользовательский 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 =.
Надеюсь это поможет.
Пожалуйста, отметьте как ответ, если да.
Description
над enum и получить его либо с помощьюIValueConverter
либо с помощьюObjectDataProvider
как указано в примере выше.