Пример #1
0
        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)
                    {
                        this.HandlePropertyChanged(sender, (PropertyChangedEventArgs)args);
                    }
                }
            }
        }
        private void HandleCurrentItemChanged(object sender, NotifyCurrentItemChangedEventArgs e)
        {
            var handler = this.CurrentChanged;

            if (handler != null)
            {
                handler(sender, e);
            }
        }
        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);
                        }
                    }
                }
            }
        }