1

我有一个 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);

这不会检索类型并产生空值。

感谢您的帮助

4

2 回答 2

0

您可以使用typeof来获取System.Type任何类型的 a。是否在同一个项目中都没有关系(只要引用了另一个项目):

Type theType = typeof(SomeOtherProject.MyClass.MyTypes);
于 2013-08-08T23:47:47.010 回答
0

这是我用来生成从枚举 int 值到其文本值的翻译的自定义转换器。

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;
      }
   }
}
于 2013-08-13T19:56:09.603 回答