1
我该如何做这样的事情?路线事件从项目到MVVM中的一个集合
ICommand Add_as_Friend是ItemsControl中的按钮。
我需要将我的事件发送到MainViewModel而不是人。
我该如何做这样的事情?路线事件从项目到MVVM中的一个集合
ICommand Add_as_Friend是ItemsControl中的按钮。
我需要将我的事件发送到MainViewModel而不是人。
你可以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);
}
}
}
这是C#,WPF吗? – Joey
是的,它是c#Wpf Silverlight4,但我写在伪代码 – user1063423