I am working on WPF and I am using a ListView, and I need to fire an event when an item is added to it. I have tried this:
var dependencyPropertyDescriptor = DependencyPropertyDescriptor.FromProperty(ItemsControl.ItemsSourceProperty, typeof(ListView));
if (dependencyPropertyDescriptor != null)
{
dependencyPropertyDescriptor.AddValueChanged(this, ItemsSourcePropertyChangedCallback);
}
.....
private void ItemsSourcePropertyChangedCallback(object sender, EventArgs e)
{
RaiseItemsSourcePropertyChangedEvent();
}
But It seems to be working only when the entire collection is changed, I have read this post: event-fired-when-item-is-added-to-listview, but the best answer applies for a listBox only. I tried to change the code to ListView but I wasnt able to do that.
I hope You can help me. Thank you in advance.
Note: This solution was meant for a WinForms ListView.
In my case I ended up coming to a fork in the road with 2 choices...
(1) Create a custom ListView control that inherits a ListView's class. Then add a new event to be raised when any item is added, deleted, or ListView is cleared. This path seemed really messy and long. Not to mention the other big issue that I would need to replace all my original ListViews with the newly created Custom ListView control. So I passed on this!
(2) With every add, delete, or clear call to the listview I also called another function simulating the CollectionChanged event.
Create the new event like function...
Add an item to the ListView elsewhere...
Clear the ListView elsewhere...
Note this only works for a WPF Listview!
After some research I have found the answer to my question and It's really easy:
Actually, the
NotifyCollectionChangedAction
enum allows your program to inform you about any change such as: Add, Move, Replace, Remove and Reset.