示例#1
0
        protected override void OnElementChanged(ElementChangedEventArgs <ListView> e)
        {
            _requestedScroll = null;

            if (e.OldElement != null)
            {
                var controller = (IListViewController)e.OldElement;
                var headerView = (VisualElement)controller.HeaderElement;
                if (headerView != null)
                {
                    headerView.MeasureInvalidated -= OnHeaderMeasureInvalidated;
                }

                var footerView = (VisualElement)controller.FooterElement;
                if (footerView != null)
                {
                    footerView.MeasureInvalidated -= OnFooterMeasureInvalidated;
                }

                controller.ScrollToRequested -= OnScrollToRequested;
                var templatedItems = ((ITemplatedItemsView <Cell>)e.OldElement).TemplatedItems;

                templatedItems.CollectionChanged        -= OnCollectionChanged;
                templatedItems.GroupedCollectionChanged -= OnGroupedCollectionChanged;
            }

            if (e.NewElement != null)
            {
                if (Control == null)
                {
                    _tableViewController = new FormsUITableViewController(e.NewElement);
                    SetNativeControl(_tableViewController.TableView);
                    if (Forms.IsiOS9OrNewer)
                    {
                        Control.CellLayoutMarginsFollowReadableWidth = false;
                    }

                    _insetTracker = new KeyboardInsetTracker(_tableViewController.TableView, () => Control.Window, insets => Control.ContentInset = Control.ScrollIndicatorInsets = insets, point =>
                    {
                        var offset = Control.ContentOffset;
                        offset.Y  += point.Y;
                        Control.SetContentOffset(offset, true);
                    });
                }
                _shouldEstimateRowHeight = true;

                var controller = (IListViewController)e.NewElement;

                controller.ScrollToRequested += OnScrollToRequested;
                var templatedItems = ((ITemplatedItemsView <Cell>)e.NewElement).TemplatedItems;

                templatedItems.CollectionChanged        += OnCollectionChanged;
                templatedItems.GroupedCollectionChanged += OnGroupedCollectionChanged;

                UpdateRowHeight();

                Control.Source = _dataSource = e.NewElement.HasUnevenRows ? new UnevenListViewDataSource(e.NewElement, _tableViewController) : new ListViewDataSource(e.NewElement, _tableViewController);

                UpdateEstimatedRowHeight();
                UpdateHeader();
                UpdateFooter();
                UpdatePullToRefreshEnabled();
                UpdateIsRefreshing();
                UpdateSeparatorColor();
                UpdateSeparatorVisibility();

                var selected = e.NewElement.SelectedItem;
                if (selected != null)
                {
                    _dataSource.OnItemSelected(null, new SelectedItemChangedEventArgs(selected));
                }
            }

            base.OnElementChanged(e);
        }