コード例 #1
0
        public void Initialize(IEnumerable groupedItems, MvxExpandableDataConverter expandableDataConverter)
        {
            _observableItemsSource.Clear();
            foreach (var disposables in _collectionChangedDisposables)
            {
                disposables.Dispose();
            }
            _collectionChangedDisposables.Clear();

            foreach (var mvxGroupable in groupedItems.Cast <object>().Select(expandableDataConverter.ConvertToMvxGroupedData))
            {
                _observableItemsSource.Add(mvxGroupable);
                var collectionChangedGroup = mvxGroupable.GroupItems as INotifyCollectionChanged;

                if (collectionChangedGroup != null)
                {
                }
            }

            var observableGroups = groupedItems as INotifyCollectionChanged;

            if (observableGroups != null)
            {
                var observableGroupsDisposeSubscription =
                    observableGroups.WeakSubscribe(
                        (sender, args) =>
                {
                    switch (args.Action)
                    {
                    case NotifyCollectionChangedAction.Reset:
                        _observableItemsSource.Clear();
                        break;

                    case NotifyCollectionChangedAction.Add:
                        foreach (var item in Enumerable.Cast <object>(args.NewItems))
                        {
                            _observableItemsSource.Add(expandableDataConverter.ConvertToMvxGroupedData(item));
                        }
                        break;

                    case NotifyCollectionChangedAction.Remove:
                        foreach (var item in Enumerable.Cast <object>(args.OldItems))
                        {
                            var mvxGroupedData = expandableDataConverter.ConvertToMvxGroupedData(item);
                            _observableItemsSource.Remove(mvxGroupedData);
                            foreach (var childItem in mvxGroupedData.GroupItems)
                            {
                                _observableItemsSource.Remove(childItem);
                            }
                        }
                        break;

                    default:
                        throw new InvalidOperationException("No move/replace in Grouped Items yet...");
                    }
                });
                _collectionChangedDisposables.Add(observableGroupsDisposeSubscription);
            }
        }
        private void AddItems(IEnumerable groupedItems, MvxExpandableDataConverter groupedDataConverter)
        {
            foreach (var mvxGroupable in groupedItems.Cast <object>().Select(groupedDataConverter.ConvertToMvxGroupedData))
            {
                if (!_observableItemsSource.Contains(mvxGroupable))
                {
                    _observableItemsSource.Add(mvxGroupable);
                }

                var childNotifyCollectionChanged = mvxGroupable.GroupItems as INotifyCollectionChanged;

                if (childNotifyCollectionChanged == null)
                {
                    continue;
                }

                if (!_groupedDataDisposables.ContainsKey(mvxGroupable))
                {
                    EventHandler <NotifyCollectionChangedEventArgs> collectionChangedHandler = (sender, args) =>
                    {
                        switch (args.Action)
                        {
                        case NotifyCollectionChangedAction.Add:
                            AddChildItems(mvxGroupable, args.NewItems);
                            break;

                        case NotifyCollectionChangedAction.Remove:
                            RemoveChildItems(mvxGroupable, args.OldItems);
                            break;

                        case NotifyCollectionChangedAction.Reset:
                            ResetChildCollection(mvxGroupable);
                            break;

                        default:
                            ItemsMovedOrReplaced?.Invoke();
                            break;
                        }
                    };

                    _groupedDataDisposables.Add(mvxGroupable,
                                                new EventHandlerWeakSubscriptionHolder(
                                                    collectionChangedHandler,
                                                    childNotifyCollectionChanged.WeakSubscribe(collectionChangedHandler)
                                                    )
                                                );
                }
            }
        }
コード例 #3
0
        public void Initialize(IEnumerable groupedItems, MvxExpandableDataConverter groupedDataConverter)
        {
            DisposeOldSource();
            this.groupedDataConverter = groupedDataConverter;
            var observableGroups = groupedItems as INotifyCollectionChanged;

            oldGroupedDataSource = observableGroups;

            if (observableGroups != null)
            {
                observableGroups.CollectionChanged += ObservableGroups_CollectionChanged;
            }

            AddItems(groupedItems, groupedDataConverter);
        }