我有一个wpf转换器,我传递了枚举类型的参数,它将绑定的整数值转换为枚举文本。为了做到这一点,我的通用我需要为传递的限定类型名称拉取枚举类型。
namespace SomeOtherProject.MyClass
//
public enum MyTypes
{
MyType1 = 0,
MyType2 = 100,
MyType3 = 200,
MyType4 = 300
}
namespace SomeProject.SomeClass
{
//
var typeName = SomeOtherProject.MyClass.MyTypes;
type = Type.GetType(typeName);
这不会检索类型并产生null。
感谢您的帮助
答案 0 :(得分:0)
您可以使用typeof
获取任何类型的System.Type
。它是否在同一个项目中无关紧要(只要引用另一个项目):
Type theType = typeof(SomeOtherProject.MyClass.MyTypes);
答案 1 :(得分:0)
这是我用来生成从枚举值到文本值的转换的自定义转换器。
WPF Xaml gridviewdatacolumn片段
... DataMemberBinding="{Binding Path=ProductTypeId, Converter={StaticResource IntEnumValueToDisplayNameConverter1}, ConverterParameter=Solution1.SomePath.SomeOtherPath\, Solution1\.SomePath\, Version\=1\.0\.0\.0\, Culture\=neutral\, PublicKeyToken\=null}"
转换器代码示例:
namespace Solution1.SomePath.Converters
{
using System;
using System.Globalization;
using System.Windows.Data;
internal class IntEnumValueToDisplayNameConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
try
{
if (value == null || parameter == null)
return null;
var type = GetTypeFromParameter(parameter);
if (type == null)
return null;
var enumValue = Enum.Parse(type, value.ToString(), true);
if (enumValue == null)
return null;
return enumValue.ToString();
}
catch (Exception)
{
return null;
}
}
private static Type GetTypeFromParameter(object parameter)
{
if (parameter == null)
return null;
Type type;
if (parameter is Type)
{
type = parameter as Type;
if (type == null || !type.IsEnum)
return null;
}
else if (parameter is string)
{
// Must be fully qualified assembly name to work
// Example: Solution1.SomePath.SomeOtherPath, Solution1.SomePath, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
var typeName = parameter as string;
if (typeName.IsEmpty())
return null;
type = Type.GetType(typeName);
if (type == null || !type.IsEnum)
return null;
}
else
return null;
return type;
}
}
}