2011-11-24 50 views

回答

0

你可以oberve您的ObservableCollection并注册事件处理程序到所有新项目一样,(我不完全使用你的类结构,你将不得不修改为您的项目):

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); 
     } 
    } 
} 
相关问题