public override void End(ScopeContext context, bool result)
 {
     //base.End(context, result);
     //if (result && _notificationAction != null)
     //{
     //    var group = context.Get<ScopeRecorder>()
     //           ?.Records
     //            .OfType<PropertyChangeRecord>()
     //            .Where(r => r.Target is IPropertyChangedNotifier)
     //            .Distinct(_comparer)
     //            .Select(r => new { Record = r, Property = r.PropertyName })
     //            .GroupBy(r => r.Record.Target);
     //    foreach (var g in group)
     //        _notificationAction(g.Key, g.Select(r => r.Property).ToArray());
     //}
     base.End(context, result);
     if (result && _notificationAction != null)
     {
         var group = context.Get<ScopeRecorder>()
                            ?.Records
                             .OfType<IPropertyChangeRecord>()
                             .Where(r => r.Target is IPropertyChangedNotifier)
                             .Distinct(_comparer)
                             .Select(r => new { Record = r, Property = r.PropertyName })
                             .GroupBy(r => r.Record.Target);
         foreach (var g in group)
             _notificationAction(g.Key, g.Select(r => r.Property).ToArray());
     }
 }
        public static void TryRecordOrElseNotify<TOwner>(ScopeContext scopeContext, TOwner owner, string propertyName, NotifyCollectionChangedEventArgs args, bool isRecordingEnabled)
            where TOwner : IPropertyChangedNotifier
        {
            var notify = false;
            if (scopeContext != null && isRecordingEnabled)
            {
                scopeContext.Get<ScopeRecorder>()
                            ?.Record(scopeContext,
                                     new CollectionChangeRecord(owner, propertyName, args));

                if (!scopeContext.ContainsKey<PropertyNotificationScopeAspect>())
                    notify = true;
            }
            else notify = true;
            if (notify)
                PropertyNotificationManager<TOwner>.PropagateNotification(owner, propertyName);
        }