Example #1
0
        /// <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);
        }
Example #2
0
        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;
            }
        }