我该怎么做?
public class person
{
public ICommand Add_as_Friend { get; private set; }
public event EventHandler C1_Friend_Add;
//....
Add_as_Friend = new Command(Handle_Add_FR, HandleCan_Add_FR);
void Handle_Add_FR(object parameter)
{
Friend_Add(this, new EventArgs());
}
}
public class person_Collection : ObservableCollection<person>
{
//.....
//???
}
public class MainViewModel : ViewModelBase
{
public person_Collection person_List{ get; set; }
public person_Collection person_List2{ get; set; }
person_Collection.???.item.Friend_Add += new EventHandler(Add);
void Add(object sender, EventArgs e)
{
myPerson = sender as person;
person_List2.add(myPerson);
//...
}
}
ICommand Add_as_Friend是ItemsControl中的一个按钮。
我需要将事件发送给MainViewModel而不是该人。
最佳答案
您可以遵守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);
}
}
}
关于c# - 将事件从项目路由到MVVM中的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8254085/