我注意到WPF DataGrid默认显示Enum Name。这很棒。但有没有办法显示一个更友好的名字?即在我的情况下没有这些下划线?
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 :(得分: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 =属性。
希望这有帮助。
如果是,请标记为答案。