PropertyGrid + интерфейс - PullRequest
       8

PropertyGrid + интерфейс

0 голосов
/ 02 апреля 2010
public interface ITest {
   void Somethink();
}

public class Test1 : ITest {
   public void Somethink()  { /* do stuff */ }
   public int Test1Property { get; set; }
}

public class Test2 : ITest {
   public void Somethink()  { /* do stuff */ }
   public float Test2Property { get; set; }
}

//Main class
public class MainClass
{
   [TypeConverter(ExpandableObjectConverter)]
   public ITest test { get; set; }
}

Хорошо, у меня есть что-то вроде этого. Экземпляр MainClass выбирается PropertyGrid.

Как сделать DropDownList объектов классов, которые реализуют ITest (здесь Test1 и Test2)

Ответы [ 2 ]

1 голос
/ 02 апреля 2010

Это не так, как это работает. Получатель свойства теста вернет объект конкретного класса, который реализует ITest. Все, что ему было назначено последним, либо null, либо объект Test1, либо объект Test2. PropertyGrid использует Reflection для просмотра типа объекта и его членов. Он будет отображать либо Test1Property или Test2Property. Вы не можете выбирать.

Не уверен, что вы пытаетесь сделать, вам, вероятно, нужен UITypeEditor, если вы хотите назначить объект другого типа.

0 голосов
/ 03 апреля 2010

Хорошо, я использовал UITypeEditor (thx nobugz) и создал комбобокс для возможных значений. Значения, которые я получаю из Type[] BehaviorManager.GetBehaviorsWhichImplement(Type type) - возвращают массив типов, реализующих данный интерфейс.

Когда пользователь выбирает новое значение, я получаю новый экземпляр выбранного объекта BehaviorManager.GetBehavior(Type), который использует Activator.CreateInstance. И назначить его в собственность.

Конечно, это не выпадающий список, но он тоже довольно хорош: -)

вот статья, за которой я следую - http://philwinkel.com/blog/?p=4

Я знаю, мой грамматик трагичен, извините, я все еще пытаюсь сделать что-то с этим ;-)

...