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); }