2011-11-24 3 views

답변

0

당신은 당신의 ObservableCollection에를 oberve과 같은 모든 새 항목에 이벤트 핸들러를 등록 할 수있다 (내가 정확히 클래스 구조를 사용하지 않는, 당신은 당신의 프로젝트를 수정해야합니다) :

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); 
      } 
     } 
    } 
} 

편집 : underneath는 사용하려는 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); 
     } 
    } 
}