wpf CollectionChanged 样本
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/4587448/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
CollectionChanged sample
提问by WhoIsNinja
Can someone point to an example where CollectionChanged is implemented. I am using wpf mvvm light. I tried to google, didn't find anything good enough.
有人可以指出实现 CollectionChanged 的示例。我正在使用 wpf mvvm 灯。我试图谷歌,没有找到任何足够好的东西。
回答by Arxisos
public ObservableCollection<string> Names { get; set; }
public ViewModel()
{
names = new ObservableCollection<string>();
Names.CollectionChanged += this.OnCollectionChanged;
}
void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
//Get the sender observable collection
ObservableCollection<string> obsSender = sender as ObservableCollection<string>;
List<string> editedOrRemovedItems = new List<string>();
foreach(string newItem in e.NewItems)
{
editedOrRemovedItems.Add(newItem);
}
foreach(string oldItem in e.OldItems)
{
editedOrRemovedItems.Add(oldItem);
}
//Get the action which raised the collection changed event
NotifyCollectionChangedAction action = e.Action;
}
For more information about the NotifyCollectionChangedEventArgs look here.
有关 NotifyCollectionChangedEventArgs 的更多信息,请查看此处。
EDIT: Because you need a list of added/removed items, I modified the sample code.
编辑:因为您需要添加/删除项目的列表,所以我修改了示例代码。
回答by Alin
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
private ObservableCollection<Person> persons = new ObservableCollection<Person>();
public MainWindow()
{
InitializeComponent();
dgPerson.ItemsSource = persons;
persons.CollectionChanged += this.OnCollectionChanged;
}
void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
//Get the sender observable collection
ObservableCollection<Person> obsSender = sender as ObservableCollection<Person>;
NotifyCollectionChangedAction action = e.Action;
if (action == NotifyCollectionChangedAction.Add)
lblStatus.Content = "New person added";
if (action == NotifyCollectionChangedAction.Remove)
lblStatus.Content = "Person deleted";
}
private void btnAdd_Click(object sender, RoutedEventArgs e)
{
Person p = new Person();
p.FirstName = txtFname.Text;
p.LastName = txtLname.Text;
persons.Add(p);
}