diff --git a/Source/Tests/TrackableEntities.Client.Tests/ChangeTrackingCollectionTests.cs b/Source/Tests/TrackableEntities.Client.Tests/ChangeTrackingCollectionTests.cs index 244726e5..cf17c3e7 100644 --- a/Source/Tests/TrackableEntities.Client.Tests/ChangeTrackingCollectionTests.cs +++ b/Source/Tests/TrackableEntities.Client.Tests/ChangeTrackingCollectionTests.cs @@ -752,6 +752,22 @@ public void EntityChanged_Event_Should_Fire_When_Graph_Items_Added_Modified_Dele Assert.Equal(7, changesCount); } + [Fact] + public void EntityChanged_Event_Should_Provide_Better_EventArgs() + { + var database = new MockNorthwind(); + var order = database.Orders[0]; + var changeTracker = new ChangeTrackingCollection { order }; + changeTracker.EntityChanged += (s, e) => + { + var ecea = (EntityChangedEventArgs)e; + Assert.Same(order, ecea.Entity); + Assert.Equal(nameof(Order.OrderId), ecea.PropertyName); + }; + + order.OrderId++; + } + #endregion } } diff --git a/Source/TrackableEntities.Client.Net4/TrackableEntities.Client.Net4.csproj b/Source/TrackableEntities.Client.Net4/TrackableEntities.Client.Net4.csproj index 978821eb..aa6fa7ca 100644 --- a/Source/TrackableEntities.Client.Net4/TrackableEntities.Client.Net4.csproj +++ b/Source/TrackableEntities.Client.Net4/TrackableEntities.Client.Net4.csproj @@ -73,6 +73,9 @@ EntityBasePortable.cs + + EntityChangedEventArgs.cs + IIdentifiable.cs diff --git a/Source/TrackableEntities.Client.Net45/TrackableEntities.Client.Net45.csproj b/Source/TrackableEntities.Client.Net45/TrackableEntities.Client.Net45.csproj index 35c29f5a..ba2c5732 100644 --- a/Source/TrackableEntities.Client.Net45/TrackableEntities.Client.Net45.csproj +++ b/Source/TrackableEntities.Client.Net45/TrackableEntities.Client.Net45.csproj @@ -71,6 +71,9 @@ EntityBase.cs + + EntityChangedEventArgs.cs + IIdentifiable.cs diff --git a/Source/TrackableEntities.Client/ChangeTrackingCollection.cs b/Source/TrackableEntities.Client/ChangeTrackingCollection.cs index 653de6f7..beb7cd98 100644 --- a/Source/TrackableEntities.Client/ChangeTrackingCollection.cs +++ b/Source/TrackableEntities.Client/ChangeTrackingCollection.cs @@ -157,7 +157,7 @@ private void OnPropertyChanged(object sender, PropertyChangedEventArgs e) if (entity.TrackingState == TrackingState.Unchanged) { entity.TrackingState = TrackingState.Modified; - if (EntityChanged != null) EntityChanged(this, EventArgs.Empty); + if (EntityChanged != null) EntityChanged(this, new EntityChangedEventArgs(entity, null, e.PropertyName)); } // Add prop to modified props, and fire EntityChanged event @@ -171,7 +171,7 @@ private void OnPropertyChanged(object sender, PropertyChangedEventArgs e) } } } - } + } /// /// Insert item at specified index. @@ -201,7 +201,7 @@ protected override void InsertItem(int index, TEntity item) item.SetState(TrackingState.Added, visitationHelper.Clone()); // Fire EntityChanged event - if (EntityChanged != null) EntityChanged(this, EventArgs.Empty); + if (EntityChanged != null) EntityChanged(this, new EntityChangedEventArgs(item, Parent, null)); } base.InsertItem(index, item); } @@ -239,7 +239,7 @@ protected override void RemoveItem(int index) item.SetState(TrackingState.Deleted, visitationHelper.Clone()); // Fire EntityChanged event - if (EntityChanged != null) EntityChanged(this, EventArgs.Empty); + if (EntityChanged != null) EntityChanged(this, new EntityChangedEventArgs(item, Parent, null)); // Cache deleted item if not added or already cached if (item.TrackingState != TrackingState.Added diff --git a/Source/TrackableEntities.Client/EntityChangedEventArgs.cs b/Source/TrackableEntities.Client/EntityChangedEventArgs.cs new file mode 100644 index 00000000..26eec6f3 --- /dev/null +++ b/Source/TrackableEntities.Client/EntityChangedEventArgs.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TrackableEntities.Client +{ + /// + /// Supplies data about the object that raised the event. + /// + public class EntityChangedEventArgs : EventArgs + { + /// + /// Initializes a new instance of . /// + /// + /// + /// + public EntityChangedEventArgs(ITrackable entity, ITrackable parent, string propertyName) + { + Entity = entity; + Parent = parent; + PropertyName = propertyName; + } + + /// + /// To be added. + /// + public ITrackable Entity { get; } + /// + /// To be added. + /// + public ITrackable Parent { get; } + /// + /// To be added. + /// + public string PropertyName { get; } + } +} diff --git a/Source/TrackableEntities.Client/TrackableEntities.Client.csproj b/Source/TrackableEntities.Client/TrackableEntities.Client.csproj index 30e018cc..4d3d3d28 100644 --- a/Source/TrackableEntities.Client/TrackableEntities.Client.csproj +++ b/Source/TrackableEntities.Client/TrackableEntities.Client.csproj @@ -70,6 +70,7 @@ +