예제 #1
0
 static void GridHelpers_VectorChanged(IObservableVector<object> sender, IVectorChangedEventArgs @event)
 {
     //so, jetzt für jedes Item eine Gridrow anlegen, aber nur wie hoch?
     foreach (var item in sender)
     {
         
     }
 }
예제 #2
0
 private void HistoryChanged(IObservableVector<object> sender, IVectorChangedEventArgs @event)
 {
     if (InstantMessagingHistory.Items.Count > 0)
     {
         var lastItem = InstantMessagingHistory.Items[InstantMessagingHistory.Items.Count - 1];
         InstantMessagingHistory.UpdateLayout();
         InstantMessagingHistory.ScrollIntoView(lastItem);
     }
 }
예제 #3
0
 public FeedInfo(String uri, String title, String imageUri)
 {
     _uri = new Uri(uri);
     _title = title;
     if (imageUri != null)
     {
         _imageUri = new Uri(imageUri);
     }
     _feedItems = new ObservableVector<object>();
 }
        private void ItemsOnVectorChanged(IObservableVector<object> sender, IVectorChangedEventArgs @event)
        {
            if (listBox == null) return;

            var lastItem = listBox.Items.LastOrDefault();
            if (lastItem != null)
            {
                listBox.UpdateLayout();
                listBox.ScrollIntoView(lastItem);
            }
        }
예제 #5
0
 private void ActionCollection_VectorChanged(IObservableVector<DependencyObject> sender, IVectorChangedEventArgs eventArgs)
 {
     CollectionChange collectionChange = eventArgs.CollectionChange;
     if (collectionChange == null)
     {
         foreach (DependencyObject current in this)
             ActionCollection.VerifyType(current);
     }
     if (collectionChange == CollectionChange.ItemInserted || collectionChange == CollectionChange.ItemChanged)
     {
         DependencyObject item = this[(int)eventArgs.Index];
         ActionCollection.VerifyType(item);
     }
 }
예제 #6
0
        private void BehaviorCollection_VectorChanged(IObservableVector<DependencyObject> sender, IVectorChangedEventArgs eventArgs)
        {
            if (eventArgs.CollectionChange == null)
            {
                foreach (IBehavior current in this.oldCollection)
                {
                    if (current.AssociatedObject != null)
                    {
                        current.Detach();
                    }
                }
                this.oldCollection.Clear();
                foreach (DependencyObject dependencyObject in this.AsEnumerable())
                    this.oldCollection.Add(this.VerifiedAttach(dependencyObject));
                return;
            }

            int index = (int)eventArgs.Index;
            DependencyObject item = this[index];
            switch (eventArgs.CollectionChange)
            {
                case CollectionChange.ItemInserted:
                    this.oldCollection.Insert(index, this.VerifiedAttach(item));
                    return;
                case CollectionChange.ItemRemoved:
                    {
                        IBehavior behavior = this.oldCollection[index];
                        if (behavior.AssociatedObject != null)
                        {
                            behavior.Detach();
                        }
                        this.oldCollection.RemoveAt(index);
                        return;
                    }
                case CollectionChange.ItemChanged:
                    {
                        IBehavior behavior = this.oldCollection[index];
                        if (behavior.AssociatedObject != null)
                        {
                            behavior.Detach();
                        }
                        this.oldCollection[index] = this.VerifiedAttach(item);
                        return;
                    }
                default:
                    return;
            }
        }
 private static void OnVectorChanged(IObservableVector<DependencyObject> sender, IVectorChangedEventArgs e)
 {
     switch (e.CollectionChange)
     {
         case CollectionChange.ItemInserted:
         case CollectionChange.ItemChanged:
             VerifyType(sender[(int)e.Index]);
             break;
         case CollectionChange.Reset:
             foreach (var item in sender)
             {
                 VerifyType(item);
             }
             break;
     }
 }
        private static void OnVectorChanged(IObservableVector<DependencyObject> sender, IVectorChangedEventArgs e)
        {
            var associatedObject = ((TriggerActionCollection) sender)._associatedObject;

            switch (e.CollectionChange)
            {
                case CollectionChange.ItemInserted:
                case CollectionChange.ItemChanged:
                    var item = sender[(int) e.Index];
                    VerifyType(item);
                    OnItemAdded(item, associatedObject);
                    break;
                case CollectionChange.ItemRemoved:
                    OnItemRemoved(sender[(int)e.Index]);
                    break;
                case CollectionChange.Reset:
                    foreach (var x in sender) { VerifyType(x); }
                    foreach (var x in sender) { OnItemRemoved(x); }
                    foreach (var x in sender) { OnItemAdded(x, associatedObject); }
                    break;
            }
        }
예제 #9
0
 private void OnGeometriesChanged(IObservableVector <Geometry> sender, IVectorChangedEventArgs e)
 {
     Invalidate();
 }
예제 #10
0
파일: IGroupInfo.cs 프로젝트: HeToC/HDK
 public GroupInfo(TKey key, IObservableVector <TElement> source)
     : base(source)
 {
     Key = key;
 }
 /// <summary>
 /// 컨트롤에서 발생한 이벤트를 이용해서 뷰모델의 프로퍼티에 작업
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="event"></param>
 void ControlToViewModel_VectorChanged(IObservableVector<object> sender, IVectorChangedEventArgs @event)
 {
     if (_isLock == true) return;
     _isLock = true;
     //Reset, ItemInserted만 발생함
     switch (@event.CollectionChange)
     {
         case CollectionChange.Reset:
             ((IList)SelectedItems).Clear();
             break;
         case CollectionChange.ItemInserted:
             var item = sender.ElementAt((int)@event.Index);
             ((IList)SelectedItems).Add(item);
             break;
         case CollectionChange.ItemRemoved:
             if (true) { }     //디버그
             break;
         case CollectionChange.ItemChanged:
             if (true) { }     //디버그
             break;
     }
     _isLock = false;
 }
예제 #12
0
 private void Items_VectorChanged(IObservableVector <object> sender, IVectorChangedEventArgs @event)
 {
     Debug.WriteLine($"{sender.GetHashCode()}");
     Debug.WriteLine($"{ListView1.Items.GetHashCode()}");
 }
 void OnCommandsChanged(IObservableVector <ICommandBarElement> sender, IVectorChangedEventArgs args)
 {
     UpdateVisibility();
 }
예제 #14
0
 private void Items_VectorChanged(IObservableVector <object> sender, IVectorChangedEventArgs @event)
 {
     CheckForEmptyView();
 }
예제 #15
0
        void OnVectorChanged(
            IObservableVector <object> sender,
            IVectorChangedEventArgs e)
        {
            // We need to build up NotifyCollectionChangedEventArgs here to raise the event.
            // There is opportunity to make this faster by caching the args if it does
            // show up as a perf issue.
            // Also note that we do not access the data - we just add nullptr. We just
            // need the count.

            global::System.Collections.Specialized.NotifyCollectionChangedAction action;
            int oldStartingIndex = -1;
            int newStartingIndex = -1;

            var oldItems = new List <object>();
            var newItems = new List <object>();

            switch (e.CollectionChange)
            {
            case CollectionChange.ItemInserted:
                action           = global::System.Collections.Specialized.NotifyCollectionChangedAction.Add;
                newStartingIndex = (int)e.Index;
                newItems.Add(null);
                OnItemsSourceChanged(new NotifyCollectionChangedEventArgs(action, newItems, newStartingIndex));
                break;

            case CollectionChange.ItemRemoved:
                action           = global::System.Collections.Specialized.NotifyCollectionChangedAction.Remove;
                oldStartingIndex = (int)e.Index;
                oldItems.Add(null);
                OnItemsSourceChanged(new NotifyCollectionChangedEventArgs(action, oldItems, oldStartingIndex));
                break;

            case CollectionChange.ItemChanged:
                action           = global::System.Collections.Specialized.NotifyCollectionChangedAction.Replace;
                oldStartingIndex = (int)e.Index;
                newStartingIndex = oldStartingIndex;
                newItems.Add(null);
                oldItems.Add(null);
                OnItemsSourceChanged(new NotifyCollectionChangedEventArgs(action, newItems, oldItems, newStartingIndex));
                break;

            case CollectionChange.Reset:
                action = global::System.Collections.Specialized.NotifyCollectionChangedAction.Reset;
                OnItemsSourceChanged(new NotifyCollectionChangedEventArgs(action));
                break;

            default:
                throw new InvalidOperationException("Unsupported collection change");
            }

            // Uno specific: WinUI uses an internal overload of NotifyCollectionChangedEventArgs constructor with 5 args,
            // we use a specific overload for each case instead

            //OnItemsSourceChanged(
            //	new NotifyCollectionChangedEventArgs(
            //		action,
            //		newItems,
            //		oldItems,
            //		newStartingIndex,
            //		oldStartingIndex);
        }
예제 #16
0
 private void ItemsCollectionChanged(IObservableVector <object> sender, IVectorChangedEventArgs e)
 {
     selectItemsButton.IsEnabled = listView.Items.Count > 0;
 }
예제 #17
0
 private void OnVectorChanged(IObservableVector <T> sender, IVectorChangedEventArgs @event)
 {
     VectorChanged?.Invoke(this, @event);
 }
예제 #18
0
 private void SecondaryCommands_VectorChanged(IObservableVector <ICommandBarElement> sender, IVectorChangedEventArgs @event)
 {
     System.Diagnostics.Debug.WriteLine("Secondary vector changed, " + sender.Count + " elements in sender");
     UpdateCommandsVisibilityTracking(sender);
 }
예제 #19
0
 private void ItemsChanged(IObservableVector<object> sender, IVectorChangedEventArgs @event)
 {
     ItemHeight.Value = ActualHeight/Items.Count;
 }
예제 #20
0
 private void OnItemsVectorChanged(IObservableVector <object> sender, IVectorChangedEventArgs @event)
 {
     SynchronizeItems();
 }
 private void SubscribeToItemChange(IObservableVector <ICommandBarElement> commands)
 {
     commands.VectorChanged += Commands_VectorChanged;
 }
예제 #22
0
 internal DependencyObjectCollection(IObservableVector <Windows.UI.Xaml.DependencyObject> underlying)
 {
     _underlyingCollection = underlying;
     VectorChanged        -= null;
 }
예제 #23
0
 private void OnFiguresVectorChanged(IObservableVector <PathFigure> sender, IVectorChangedEventArgs?args)
 {
     _svgElement.InvalidateMeasure();
 }
예제 #24
0
 //public SensorMapToScatterLine(ScatterLineSeries lineSeries, IObservableVector<StationSensor> sensors )
 public SensorMapToScatterLine(LineSeries lineSeries, IObservableVector <StationSensor> sensors)
 {
     //m_ScatterLineSeries = lineSeries;
     m_LineSeries = lineSeries;
     m_Sensors    = sensors;
 }
예제 #25
0
 public FeedInfo(String uri)
 {
     _uri = new Uri(uri);
     _feedItems = new ObservableVector<object>();
 }
예제 #26
0
 private void ItemsChanged(IObservableVector<object> sender, IVectorChangedEventArgs @event)
 {
     ItemWidth = ThisView.ActualWidth/ThisView.Items.Count;
 }
 private void Commands_VectorChanged(IObservableVector <ICommandBarElement> sender, IVectorChangedEventArgs @event) => Update();
예제 #28
0
 public bool LoadFeedsFromDB()
 {
     try
     {
         _feeds = new ObservableVector<object>(
         new ObservableCollection<object>(
             PersistenceHelper.GetFeedsFromDBAsync().AsTask().Result.OfType<object>()));
         return _feeds.Count != 0;
     }
     catch
     {
         Debug.WriteLine("Failed to get feeds from DB due to an error.");
         return false;
     }
 }
예제 #29
0
 private void OnVectorChanged(IObservableVector <object> sender, IVectorChangedEventArgs e)
 {
     this.ProcessEvent(sender, e);
 }
예제 #30
0
 private void Commands_VectorChanged(IObservableVector<ICommandBarElement> sender, IVectorChangedEventArgs @event) => Update();
예제 #31
0
        private void BehaviorCollection_VectorChanged(IObservableVector<DependencyObject> sender, IVectorChangedEventArgs eventArgs)
        {
            if (eventArgs.CollectionChange == CollectionChange.Reset)
            {
                foreach (IBehavior behavior in this.oldCollection)
                {
                    if (behavior.AssociatedObject != null)
                    {
                        behavior.Detach();
                    }
                }

                this.oldCollection.Clear();

                foreach (DependencyObject newItem in this)
                {
                    this.oldCollection.Add(this.VerifiedAttach(newItem));
                }

#if DEBUG
                this.VerifyOldCollectionIntegrity();
#endif
                return;
            }

            int eventIndex = (int)eventArgs.Index;
            DependencyObject changedItem = this[eventIndex];

            switch (eventArgs.CollectionChange)
            {
                case CollectionChange.ItemInserted:
                    this.oldCollection.Insert(eventIndex, this.VerifiedAttach(changedItem));

                    break;

                case CollectionChange.ItemChanged:
                    IBehavior oldItem = this.oldCollection[eventIndex];
                    if (oldItem.AssociatedObject != null)
                    {
                        oldItem.Detach();
                    }

                    this.oldCollection[eventIndex] = this.VerifiedAttach(changedItem);

                    break;

                case CollectionChange.ItemRemoved:
                    oldItem = this.oldCollection[eventIndex];
                    if (oldItem.AssociatedObject != null)
                    {
                        oldItem.Detach();
                    }

                    this.oldCollection.RemoveAt(eventIndex);
                    break;

                default:
                    Debug.Assert(false, "Unsupported collection operation attempted.");
                    break;
            }

#if DEBUG
            this.VerifyOldCollectionIntegrity();
#endif
        }
 private void HandlePlaybackListChanges(IObservableVector<MediaPlaybackItem> vector)
 {
     if (vector.Count > 0)
     {
         CanSkipNext = true;
         CanSkipPrevious = true;
     }
     else
     {
         CanSkipNext = false;
         CanSkipPrevious = false;
     }
 }
예제 #33
0
        internal void OnViewChanged(IObservableVector<object> sender, IVectorChangedEventArgs e)
        {
            // handle action
            var rows = Rows;
            var index = (int)e.Index;
            var rowIndex = GetRowIndex(index);

            var topRow = -1;
            if (_cellPanel != null)
            {
                _cellPanel.UpdateViewRange();
                var viewRange = _cellPanel.ViewRange;
                topRow = viewRange.Row;
            }

            switch (e.CollectionChange)
            {
                case CollectionChange.ItemInserted:
                    // create the new bound row
                    var r = CreateBoundRow(sender[index]);

                    if (rowIndex < 0)
                    {
                        rowIndex = rows.Count;
                    }

                    // add the new bound row to the rows collection
                    if (rowIndex > -1)
                    {
                        rows.Insert(rowIndex, r);
                    }
                    else
                    {
                        LoadRows();
                    }
                    if (index <= topRow)
                    {
                        if (Math.Abs(ScrollPosition.Y) >= HeaderMeasureHeight)
                        {
                            ScrollPosition = new Point(ScrollPosition.X, ScrollPosition.Y - _cellPanel.Rows.DefaultSize);
                        }
                    }
                    break;

                case CollectionChange.ItemRemoved:

                    if (rowIndex > -1)
                    {
                        rows.RemoveAt(rowIndex);
                    }
                    else
                    {
                        LoadRows();
                    }
                    if (index <= topRow)
                    {
                        if (Math.Abs(ScrollPosition.Y) >= HeaderMeasureHeight)
                        {
                            ScrollPosition = new Point(ScrollPosition.X, ScrollPosition.Y + _cellPanel.Rows.DefaultSize);
                        }
                    }
                    break;

                case CollectionChange.ItemChanged:
                    rows[rowIndex].DataItem = sender[index];
                    _cellPanel.Invalidate(new CellRange(rowIndex, 0, rowIndex, Columns.Count - 1));
                    break;

                default: // Reset, Move
                    if (_cellPanel != null)
                    {
                        _cellPanel.currentpointerOverRow = -1;
                        _cellPanel.currentPressedRow = -1;
                        _cellPanel.footerHeight = 0;
                        pointerOverPoint = null;
                    }
                    LoadRows();
                    break;
            }
            // ensure scrollbars are in sync
            InvalidateArrange();
        }
예제 #34
0
        private void BehaviorCollection_VectorChanged(IObservableVector <DependencyObject> sender, IVectorChangedEventArgs eventArgs)
        {
            if (eventArgs.CollectionChange == CollectionChange.Reset)
            {
                foreach (IBehavior behavior in this.oldCollection)
                {
                    if (behavior.AssociatedObject != null)
                    {
                        behavior.Detach();
                    }
                }

                this.oldCollection.Clear();

                foreach (DependencyObject newItem in this)
                {
                    this.oldCollection.Add(this.VerifiedAttach(newItem));
                }

#if DEBUG
                this.VerifyOldCollectionIntegrity();
#endif
                return;
            }

            int eventIndex = (int)eventArgs.Index;
            DependencyObject changedItem = this[eventIndex];

            switch (eventArgs.CollectionChange)
            {
            case CollectionChange.ItemInserted:
                this.oldCollection.Insert(eventIndex, this.VerifiedAttach(changedItem));

                break;

            case CollectionChange.ItemChanged:
                IBehavior oldItem = this.oldCollection[eventIndex];
                if (oldItem.AssociatedObject != null)
                {
                    oldItem.Detach();
                }

                this.oldCollection[eventIndex] = this.VerifiedAttach(changedItem);

                break;

            case CollectionChange.ItemRemoved:
                oldItem = this.oldCollection[eventIndex];
                if (oldItem.AssociatedObject != null)
                {
                    oldItem.Detach();
                }

                this.oldCollection.RemoveAt(eventIndex);
                break;

            default:
                Debug.Assert(false, "Unsupported collection operation attempted.");
                break;
            }

#if DEBUG
            this.VerifyOldCollectionIntegrity();
#endif
        }
예제 #35
0
        public void LoadFeedsFromTheInternet()
        {
            _feeds = new ObservableVector<object>();
            PersistenceHelper.GetUserFeedsAsync().AsTask().ContinueWith(t =>
            {
                foreach (var uri in t.Result)
                {
                    try
                    {
                        var fi = new FeedInfo(uri);
                        fi.BeginLoad();
                        _feeds.Add(fi);
                    }
                    catch
                    {
                        Debug.WriteLine("Failed to load FeedInfo");
                    }
                }

                if (_feeds.Count > 0)
                {
                    SelectedFeed = (FeedInfo)_feeds[0];
                }
            });
        }
예제 #36
0
 private void OnItemsChanged(IObservableVector <object> sender, IVectorChangedEventArgs @event)
 {
     UpdateSuggestionList();
 }
예제 #37
0
 public static CollectionViewGroupCollectionItem Create(object group, IObservableVector <object> items)
 {
     return(new CollectionViewGroupCollectionItem(group, items));
 }
예제 #38
0
 public CollectionViewGroupCollectionItem(object group, IObservableVector <object> items)
 {
     Group      = group;
     GroupItems = items;
 }
 private async void Items_VectorChanged(IObservableVector<MediaPlaybackItem> sender, IVectorChangedEventArgs args)
 {
     if (disposed) return;
     await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
     {
         if (disposed) return;
         HandlePlaybackListChanges(sender);
     });
 }
예제 #40
0
        internal void OnViewChanged(IObservableVector <object> sender, IVectorChangedEventArgs e)
        {
            //Debug.WriteLine("OnViewChanged------------");
            // handle action
            var rows     = Rows;
            var index    = (int)e.Index;
            var rowIndex = GetRowIndex(index);

            var topRow = -1;

            if (ItemsUpdatingScrollMode == ItemsUpdatingScrollMode.KeepItemsInView)
            {
                if (_cellPanel != null &&
                    addRemoveItemHanlder.CurrentTopRow == -1)
                {
                    //_cellPanel.UpdateViewRange();
                    var viewRange = _cellPanel.ViewRange;
                    topRow = viewRange.Row;
                    addRemoveItemHanlder.CurrentTopRow = viewRange.Row;
                }
                topRow = addRemoveItemHanlder.CurrentTopRow;
            }

            //Debug.WriteLine("topRow : " + topRow);
            switch (e.CollectionChange)
            {
            case CollectionChange.ItemInserted:
                // create the new bound row
                var r = CreateBoundRow(sender[index]);

                if (rowIndex < 0)
                {
                    rowIndex = rows.Count;
                }

                // add the new bound row to the rows collection
                if (rowIndex > -1)
                {
                    rows.Insert(rowIndex, r);
                }
                else
                {
                    LoadRows();
                }
                if (ItemsUpdatingScrollMode == ItemsUpdatingScrollMode.KeepItemsInView)
                {
                    addRemoveItemHanlder.AddTotalCount++;
                    if (index <= topRow)
                    {
                        if (Math.Abs(ScrollPosition.Y) >= HeaderMeasureHeight)
                        {
                            //Debug.WriteLine("Add : " + Rows.Count);
                            addRemoveItemHanlder.AddItemLessThanTopCount++;
                            addRemoveItemHanlder.CurrentTopRow++;
                            //ScrollPosition = new Point(ScrollPosition.X, ScrollPosition.Y - _cellPanel.Rows.DefaultSize);
                        }
                    }
                }
                break;

            case CollectionChange.ItemRemoved:

                if (rowIndex > -1)
                {
                    rows.RemoveAt(rowIndex);
                }
                else
                {
                    LoadRows();
                }

                if (ItemsUpdatingScrollMode == ItemsUpdatingScrollMode.KeepItemsInView)
                {
                    addRemoveItemHanlder.RemoveTotalCount++;
                    if (index <= topRow)
                    {
                        if (Math.Abs(ScrollPosition.Y) >= HeaderMeasureHeight)
                        {
                            //Debug.WriteLine("Remove : " + Rows.Count);
                            addRemoveItemHanlder.RemoveItemLessThanTopCount++;
                            addRemoveItemHanlder.CurrentTopRow--;
                            //ScrollPosition = new Point(ScrollPosition.X, ScrollPosition.Y + _cellPanel.Rows.DefaultSize);
                        }
                    }
                }
                break;

            case CollectionChange.ItemChanged:
                rows[rowIndex].DataItem = sender[index];
                _cellPanel.Invalidate(new CellRange(rowIndex, 0, rowIndex, Columns.Count - 1));
                break;

            default:     // Reset, Move
                if (_cellPanel != null)
                {
                    _cellPanel.currentpointerOverRow = -1;
                    _cellPanel.currentPressedRow     = -1;
                    _cellPanel.footerHeight          = 0;
                    pointerOverPoint = null;
                }
                addRemoveItemHanlder.Reset();
                LoadRows();
                break;
            }
            // ensure scrollbars are in sync
            InvalidateArrange();
        }
예제 #41
0
		void OnCommandsChanged(IObservableVector<ICommandBarElement> sender, IVectorChangedEventArgs args)
		{
			UpdateMore();
		}
        void IWeakEventListener.ReceiveEvent(object sender, object args)
        {
            NotifyCurrentItemChangedEventArgs currentItemChangedArgs = args as NotifyCurrentItemChangedEventArgs;

            if (currentItemChangedArgs != null)
            {
                this.HandleCurrentItemChanged(sender, currentItemChangedArgs);
            }
            else
            {
                IObservableVector <object> iov = sender as IObservableVector <object>;
                if (iov != null)
                {
                    IVectorChangedEventArgs       vectorArgs = args as IVectorChangedEventArgs;
                    NotifyCollectionChangedAction action     = NotifyCollectionChangedAction.Add;
                    int index          = (int)vectorArgs.Index;
                    var collectionView = sender as ICollectionView;
                    var changedItems   = new List <object>();
                    var oldItems       = new List <object>();
                    NotifyCollectionChangedEventArgs args2 = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset);
                    switch (vectorArgs.CollectionChange)
                    {
                    case CollectionChange.ItemChanged:
                        action = NotifyCollectionChangedAction.Replace;
                        changedItems.Add(collectionView[index]);
                        oldItems.Add(this.InternalList[index]);
                        args2 = new NotifyCollectionChangedEventArgs(action, changedItems, oldItems, index);
                        break;

                    case CollectionChange.ItemInserted:
                        action = NotifyCollectionChangedAction.Add;
                        changedItems.Add(collectionView[index]);
                        args2 = new NotifyCollectionChangedEventArgs(action, changedItems, index);
                        break;

                    case CollectionChange.ItemRemoved:
                        action = NotifyCollectionChangedAction.Remove;
                        oldItems.Add(this.InternalList[index]);
                        args2 = new NotifyCollectionChangedEventArgs(action, oldItems, index);
                        break;

                    case CollectionChange.Reset:
                        action = NotifyCollectionChangedAction.Reset;
                        args2  = new NotifyCollectionChangedEventArgs(action);
                        break;
                    }

                    this.HandleCollectionChanged(sender, args2);
                }
                else
                {
                    INotifyPropertyChanged inpc = sender as INotifyPropertyChanged;
                    if (inpc != null)
                    {
                        string             propertyName = ((PropertyChangedEventArgs)args).PropertyName;
                        NestedPropertyInfo info;
                        if (this.nestedObjectInfos != null && this.nestedObjectInfos.TryGetValue(sender, out info))
                        {
                            this.NestedPropertyChanged(sender, info.rootItems, propertyName, info.nestedPropertyPath);
                            PropertyChangedEventArgs arguments = new PropertyChangedEventArgs(info.nestedPropertyPath + propertyName);

                            foreach (var rootItem in info.rootItems)
                            {
                                this.HandlePropertyChanged(rootItem, arguments);
                            }
                        }
                        else
                        {
                            if (this.nestedObjectInfos != null && this.nestedObjectInfos.Count > 0)
                            {
                                this.NestedPropertyChanged(sender, new HashSet <object> {
                                    sender
                                }, propertyName);
                            }

                            this.HandlePropertyChanged(sender, (PropertyChangedEventArgs)args);
                        }
                    }
                }
            }
        }