如何在WPF数据网格中显示友好的枚举名称

时间:2014-07-22 18:16:18

标签: c# wpf datagrid

我注意到WPF DataGrid默认显示Enum Name。这很棒。但有没有办法显示一个更友好的名字?即在我的情况下没有这些下划线?

enter image description here

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();
            }
        }

1 个答案:

答案 0 :(得分: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根元素中定义Converter并将其指向转换器的命名空间。如果在Blend / Visual Studio XAML Designer中完成,则可以轻松实现,因为您可以从“创建绑定”菜单创建新的转换器。

接下来将转换器应用于绑定...

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

这是一个标签与自身的hacky绑定,重要的部分是Converter =属性。

希望这有帮助。

如果是,请标记为答案。