Вы можете выделить свою ObservableCollection и зарегистрировать EventHandler для всех новых элементов, подобных этому (я не совсем использую вашу структуру классов, вам придется изменить ее для вашего проекта):
public class MainViewModel : ViewModelBase
{
public ObservableCollection<Person> Persons { get; set; }
public MainViewModel()
{
Persons = new ObservableCollection<Person>();
Persons.CollectionChanged += PersonCollectionChanged;
}
private void PersonCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if(e.Action == NotifyCollectionChangedAction.Add)
{
foreach(Person person in e.NewItems)
{
person.Friend_Add += new EventHandler(Add);
}
}
}
}
Редактировать: внизу - реализация класса PersonCollection, который вы хотите использовать. Теперь вы можете выбрать, хотите ли вы использовать одну из этих реализаций. (Я бы предпочел первое)
public class Person
{
public event EventHandler AddedFriend;
}
public class PersonCollection : ObservableCollection<Person>
{
public event EventHandler AddedFriend;
public PersonCollection() : base(new ObservableCollection<Person>())
{
base.CollectionChanged += PersonCollectionChanged;
}
private void PersonCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Add)
{
foreach (Person person in e.NewItems)
{
person.AddedFriend += PersonAddedFriend;
}
}
}
private void PersonAddedFriend(object sender, EventArgs e)
{
var addedFriend = AddedFriend;
if (addedFriend != null)
{
addedFriend(sender, e);
}
}
}