/// <summary> /// Called when TabView source changes /// </summary> private void OnSourceChanged(TabView oldTabView, TabView newTabView) { if (oldTabView != null) { oldTabView.CurrentItemIndexChanged -= OnCurrentItemIndexChanged; oldTabView.PanChanged -= OnPanChanged; if (oldTabView.ItemsSource != null && oldTabView.ItemsSource is INotifyCollectionChanged) { (oldTabView.ItemsSource as INotifyCollectionChanged).CollectionChanged -= OnItemsSourceCollectionChanged; } } if (newTabView != null) { newTabView.CurrentItemIndexChanged += OnCurrentItemIndexChanged; newTabView.PanChanged += OnPanChanged; if (newTabView.ItemsSource != null && newTabView.ItemsSource is INotifyCollectionChanged) { (newTabView.ItemsSource as INotifyCollectionChanged).CollectionChanged += OnItemsSourceCollectionChanged; } } OnItemsSourceChanged(oldTabView != null ? oldTabView.ItemsSource : null, newTabView != null ? newTabView.ItemsSource : null); OnCurrentItemIndexChanged(newTabView, newTabView.CurrentItemIndex); }
private void OnContentChanged(object newContent) { if (newContent is View content) { // Remove old content from children if (_contentElement != null && Children.Contains(_contentElement)) { Children.Remove(_contentElement); } // Add new content to children _contentElement = content; Children.Insert(0, _contentElement); // Remove TabView event listeners if (_tabView != null) { _tabView.PanChanged -= OnTabViewPanChanged; } // Try find TabView from content if (content != null) { _tabView = content as TabView; if (_tabView == null) { _tabView = VisualTreeHelper.FindVisualChildren <TabView>(content).FirstOrDefault(); } if (_tabView != null) { _tabView.PanChanged += OnTabViewPanChanged; } } } else if (_contentElement != null) { _contentElement.BindingContext = newContent; } }