1
어떻게하면됩니까?이벤트 전달 MVVM의 항목에서 컬렉션으로
ICommand Add_as_Friend는 ItemsControl의 버튼입니다.
내 이벤트를 사람이 아닌 MainViewModel로 보내야합니다.
어떻게하면됩니까?이벤트 전달 MVVM의 항목에서 컬렉션으로
ICommand Add_as_Friend는 ItemsControl의 버튼입니다.
내 이벤트를 사람이 아닌 MainViewModel로 보내야합니다.
당신은 당신의 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);
}
}
}
이 C#, WPF입니까? – Joey
예 C# Wpf Silverlight4하지만 Pseudocode로 작성합니다. – user1063423