Он всех,
Я пытаюсь настроить класс управления проектом.
Чтобы увидеть, изменилось ли что-то в данных, я хочу реализовать события на более низком уровне структуры программирования. У меня есть несколько классов, расширяющих класс ProjectComponent. В базовом классе есть метод события и его выбрасывания, который могут использовать дочерние компоненты.
Теперь у меня есть несколько пользовательских списков (nameley eList) в объекте проекта.
Поскольку все дочерние компоненты имеют общего родителя ProjectComponent, я бы хотел, чтобы мой объект настраиваемого списка (eList) подписывался на событие при добавлении объекта и отменял подписку при удалении.
Однако при попытке проги это я получил следующую ошибку:
'ProjectComponent' не содержит
определение для itemChanged и нет
метод расширения itemChanged
принимая первый аргумент типа
'ProjectComponent'
Что является странным видением, поскольку класс явно имеет это открытое поле.
Вот код:
public class ProjectComponent
{
public event ItemChanged itemChanged;
public void throwItemChangedEvent(ItemChangedEventArgs Arguments)
{
if (itemChanged != null)
itemChanged(new Object(), Arguments);
}
}
public class eList<ProjectComponent> : IList<ProjectComponent>
{
List<ProjectComponent> internalList = new List<ProjectComponent>();
public override void Add(ProjectComponent Item)
{
this.internalList.Add(Item);
Item.itemChanged += new ItemChanged(ItemChanged_Handler);
}
private void ItemChanged_Handler(object sender, ItemChangedEventArgs eventArgs)
{
//do stuff here
}
}
Пример того, как это будет называться:
public eList<ChildClass> Children = new eList<ChildClass>();
Идея состоит в том, что когда объект в списке редактируется, объект списка получает объект следующим образом:
Children.childstring = "anything";
В настоящее время поле внутри объекта Children изменяется, и событие может быть получено.
У меня просто вопрос, что я делаю неправильно, почему я не могу добавить событие ProjectComponent в класс eList?
Или кто-нибудь знает лучший способ добиться таких же результатов?
Заранее спасибо,
Harry
Редактировать: определение ItemChanged delagate:
public delegate void ItemChanged(object sender, ItemChangedEventArgs eventArgs);
public class ItemChangedEventArgs : EventArgs
{
private String p_CallStack;
public String CallStack
{
get { return this.p_CallStack; }
set { this.p_CallStack = value; }
}
public ItemChangedEventArgs()
{
p_CallStack = "";
}
public ItemChangedEventArgs(String StackStart)
{
p_CallStack = StackStart;
}
}