Список классов с событиями в дизайнере - PullRequest
1 голос
/ 17 ноября 2011

Я пишу оболочку для связи OPC с контроллером, и я создал компонент следующим образом:

public class OPCGroup : Component
{
    (snipped)

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    public List<OPCItem> Items
    {
        get { return mItems; }
        set { mItems = value; }
    }

}

Каждый элемент в списке элементов выше выглядит следующим образом

public class OPCItem : MarshalByRefObject, IDisposable
{
    private String mName;

    private String mTag;

    private object mValue;

    public String Name
    {
        get { return mName; }
        set { mName = value; }
    }

    public String Tag
    {
        get { return mTag; }
        set { mTag = value; }
    }

    public object Value
    {
        get { return mValue; }
        set { Change(value, true); }
    }

    public event OPCItemEvent Changed;
}

Теперь проблема в том, что событие Changed OPCItem не изменяется во время разработки, я могу добавлять события к элементам во время выполнения, используя

opcGroup1.Items[0].Changed += new OPCItemEvent(Item0Changed);

Однако я хотел бы иметь возможностьвместо этого связывайте события во время разработки, поскольку это проще.

Я попытался создать события вручную с помощью IEventBindingService в пользовательском UITypeEditor следующим образом

        IEventBindingService eventBindingService = provider.GetService(typeof(IEventBindingService)) as IEventBindingService;


        EventDescriptorCollection edc = TypeDescriptor.GetEvents(Group.Items[0]);

        EventDescriptor Event = edc.Find("Changed", false);

        PropertyDescriptor pd = eventBindingService.GetEventProperty(Event);

        pd.SetValue(Group.Items[0], Group.Items[0].Name + "Changed");

Но тогда я получаю ошибку

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

Итак, я реализовал интерфейс IComponent вКласс OPCItem для получения свойства Site, но теперь элементы коллекции отображаются в конструкторе.

Есть ли какие-либо советы о том, как решить эту проблему?

...