Bonjour,

J'ai pour l'une de mes custom activity pour workflow foundation, besoin d'avoir une propriété de type Integer mais relié à une enum.

En gros, j'aimerai que avoir une propriété de type Integer mais que la propertygrid du designer de Visual Studio me permette de choisir parmi une liste déroulante listant les valeurs de mon enum. (sisi c'est possible, j'en suis convaincu).

Voici ma classe simplifiée
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public partial class StatusActivity: SequenceActivity
	{
		public StatusActivity()
		{
			InitializeComponent();
		}
 
        private int _statusID;
        [Browsable(true)]
        [Category("TAD")]
        [Description("ID of the status of the demand")]
        [ValidationOption(ValidationOption.Required)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        [TypeConverter(typeof(StatusIDConverter))]
	    public int StatusID
	    {
            get { return _statusID; }
            set { _statusID = value; }
	    }
	}
et voici le converter qui sert au niveau de la propertygrid (c'est un peu tout et n'importe quoi mais c'est parce que j'ai tout essayé et rien ne marche :/
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public class StatusIDConverter : EnumConverter
    {
        private readonly Type _enumType;
 
        public StatusIDConverter(Type type) : base(type)
        {
            _enumType = type;
        }
 
        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
        {
            return new StandardValuesCollection(Enum.GetValues(_enumType));
        }
 
        public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
        {
            if (destinationType == _enumType)
                return true;
            return base.CanConvertFrom(context, destinationType);
        }
 
        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
        {
            if (sourceType == _enumType)
                return true;
            return base.CanConvertFrom(context, sourceType);
 
        }
 
        public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
        {
            return (Int32) Enum.Parse(_enumType, value.ToString()); //base.ConvertTo(context, culture, value, destinationType);
            //return base.ConvertFrom(context, culture, value);
        }
        public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
        {
            //return base.ConvertFrom(context, culture, value);
            return (Int32)Enum.Parse(_enumType, value.ToString()); //base.ConvertTo(context, culture, value, destinationType);
        }
        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
        {
            return true;
        }
 
        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
        {
            return true;
        }
 
    }
Pour l'instant, j'arrive parfaitement à obtenir le fait que VStudio me propose une liste déroulante avec les noms de mon enum mais lorsque je sélectionne un element j'ai une exception "cannot convert string to int". En gros, faut qu'à un endroit, à partir de la string, je parse l'enum pour trouver la valeur sauf que je sais pas où le mettre :/


une idée?


et l'enum
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
public enum HistoryStatus
    {
        NewDemand = 1,
        WaitingForCFValidation = 2,
        WaitingForCoordinatorValidation = 3,
        WaitingForCBCValidation = 4,
        WaitingForHabilitationConfirmation = 5,
        HabilitationConfirmed = 6,
        HabilitationRefused = 7
    }