如何从解决方案中的另一个项目获取枚举类型?

时间:2013-08-08 23:44:56

标签: wpf types converter

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

感谢您的帮助

2 个答案:

答案 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;
      }
   }
}