/// <summary> /// Initializes a new instance of the <see cref="DLToolkit.Forms.Controls.FlowListViewInternalCell"/> class. /// </summary> /// <param name="flowListViewRef">Flow list view reference.</param> public FlowListViewInternalCell(WeakReference<FlowListView> flowListViewRef) { _flowListViewRef = flowListViewRef; FlowListView flowListView = null; flowListViewRef.TryGetTarget(out flowListView); _useGridAsMainRoot = !flowListView.FlowUseAbsoluteLayoutInternally; if (!_useGridAsMainRoot) { _rootLayout = new AbsoluteLayout() { Padding = 0d, BackgroundColor = flowListView.FlowRowBackgroundColor, }; View = _rootLayout; } else { _rootLayoutAuto = new Grid() { RowSpacing = 0d, ColumnSpacing = 0d, Padding = 0d, BackgroundColor = flowListView.FlowRowBackgroundColor, }; View = _rootLayoutAuto; } _flowColumnTemplate = flowListView.FlowColumnTemplate; _desiredColumnCount = flowListView.DesiredColumnCount; _flowColumnExpand = flowListView.FlowColumnExpand; }
/// <summary> /// Initializes a new instance of the <see cref="DLToolkit.Forms.Controls.FlowListViewInternalCell"/> class. /// </summary> /// <param name="flowListViewRef">Flow list view reference.</param> public FlowListViewInternalCell(WeakReference <FlowListView> flowListViewRef) { _flowListViewRef = flowListViewRef; flowListViewRef.TryGetTarget(out FlowListView flowListView); _useGridAsMainRoot = !flowListView.FlowUseAbsoluteLayoutInternally; if (!_useGridAsMainRoot) { _rootLayout = new AbsoluteLayout() { Padding = 0d, BackgroundColor = flowListView.FlowRowBackgroundColor, }; View = _rootLayout; } else { _rootLayoutAuto = new Grid() { RowSpacing = 0d, ColumnSpacing = 0d, Padding = 0d, BackgroundColor = flowListView.FlowRowBackgroundColor, }; View = _rootLayoutAuto; } _flowColumnTemplate = flowListView.FlowColumnTemplate; _desiredColumnCount = flowListView.FlowDesiredColumnCount; _flowColumnExpand = flowListView.FlowColumnExpand; View.GestureRecognizers.Clear(); View.GestureRecognizers.Add(new TapGestureRecognizer()); }
/// <summary> /// Initializes a new instance of the <see cref="DLToolkit.Forms.Controls.FlowListViewInternalCell"/> class. /// </summary> /// <param name="flowListViewRef">Flow list view reference.</param> public FlowListViewInternalCell(WeakReference<FlowListView> flowListViewRef) { this.flowListViewRef = flowListViewRef; FlowListView flowListView = null; flowListViewRef.TryGetTarget(out flowListView); rootLayout = new AbsoluteLayout() { HorizontalOptions = LayoutOptions.FillAndExpand, VerticalOptions = LayoutOptions.FillAndExpand, Padding = 0d, BackgroundColor = flowListView.FlowRowBackgroundColor, }; View = rootLayout; flowColumnsTemplates = flowListView.FlowColumnsTemplates; desiredColumnCount = flowListView.DesiredColumnCount; flowAutoColumnCount = flowListView.FlowAutoColumnCount; flowColumnExpand = flowListView.FlowColumnExpand; }
/// <summary> /// Initializes a new instance of the <see cref="DLToolkit.Forms.Controls.FlowListViewInternalCell"/> class. /// </summary> /// <param name="flowListViewRef">Flow list view reference.</param> public FlowListViewInternalCell(WeakReference <FlowListView> flowListViewRef) { this.flowListViewRef = flowListViewRef; FlowListView flowListView = null; flowListViewRef.TryGetTarget(out flowListView); rootLayout = new AbsoluteLayout() { HorizontalOptions = LayoutOptions.FillAndExpand, VerticalOptions = LayoutOptions.FillAndExpand, Padding = 0d, BackgroundColor = flowListView.FlowRowBackgroundColor, }; View = rootLayout; flowColumnsTemplates = flowListView.FlowColumnsTemplates; desiredColumnCount = flowListView.DesiredColumnCount; flowAutoColumnCount = flowListView.FlowAutoColumnCount; flowColumnExpand = flowListView.FlowColumnExpand; }
private void UpdateData() { if (!(BindingContext is IList container)) { return; } var newDesiredColumnCount = 0; if (_flowListViewRef.TryGetTarget(out FlowListView flowListView) && flowListView != null) { _flowColumnTemplate = flowListView.FlowColumnTemplate; newDesiredColumnCount = flowListView.FlowDesiredColumnCount; _flowColumnExpand = flowListView.FlowColumnExpand; } var flowGroupColumn = BindingContext as FlowGroupColumn; if (flowGroupColumn != null) { newDesiredColumnCount = flowGroupColumn.ColumnCount; } // Getting view types from templates var containerCount = container.Count; IList <DataTemplate> templates = GetDataTemplates(container); bool layoutChanged = false; if (flowGroupColumn != null && flowGroupColumn.ForceInvalidateColumns) { layoutChanged = true; flowGroupColumn.ForceInvalidateColumns = false; } else { layoutChanged = RowLayoutChanged(containerCount, templates, newDesiredColumnCount); } _desiredColumnCount = newDesiredColumnCount; if (!layoutChanged) // REUSE VIEWS { if (_useGridAsMainRoot) { for (int i = 0; i < containerCount; i++) { SetBindingContextForView(_rootLayoutAuto.Children[i], container[i]); } } else { for (int i = 0; i < containerCount; i++) { SetBindingContextForView(_rootLayout.Children[i], container[i]); } } } else // RECREATE COLUMNS { _currentColumnTemplates = new List <DataTemplate>(templates); if (_useGridAsMainRoot) { if (_rootLayoutAuto.Children.Count > 0) { _rootLayoutAuto.Children.Clear(); } var colDefs = new ColumnDefinitionCollection(); for (int i = 0; i < _desiredColumnCount; i++) { colDefs.Add(new ColumnDefinition() { Width = new GridLength(1d, GridUnitType.Star) }); } _rootLayoutAuto.ColumnDefinitions = colDefs; for (int i = 0; i < containerCount; i++) { if (!(templates[i].CreateContent() is View view)) { throw new InvalidCastException("DataTemplate must return a View"); } AddTapGestureToView(view); SetBindingContextForView(view, container[i]); if (containerCount == 0 || _desiredColumnCount == 0) { return; } AddViewToLayoutAutoHeightEnabled(view, containerCount, i); } } else { if (_rootLayout.Children.Count > 0) { _rootLayout.Children.Clear(); } for (int i = 0; i < containerCount; i++) { if (!(templates[i].CreateContent() is View view)) { throw new InvalidCastException("DataTemplate must return a View"); } AddTapGestureToView(view); SetBindingContextForView(view, container[i]); if (containerCount == 0 || _desiredColumnCount == 0) { return; } AddViewToLayoutAutoHeightDisabled(view, containerCount, i); } } } }
/// <summary> /// Override this method to execute an action when the BindingContext changes. /// </summary> /// <remarks></remarks> protected override void OnBindingContextChanged() { base.OnBindingContextChanged(); var container = BindingContext as IList; if (container == null) { return; } FlowListView flowListView = null; if (_flowListViewRef.TryGetTarget(out flowListView) && flowListView != null) { _flowColumnTemplate = flowListView.FlowColumnTemplate; _desiredColumnCount = flowListView.DesiredColumnCount; _flowColumnExpand = flowListView.FlowColumnExpand; } // Getting view types from templates var containerCount = container.Count; IList <DataTemplate> templates = GetDataTemplates(container); bool layoutChanged = RowLayoutChanged(containerCount, templates); if (!layoutChanged) // REUSE VIEWS { if (_useGridAsMainRoot) { for (int i = 0; i < containerCount; i++) { SetBindingContextForView(_rootLayoutAuto.Children[i], container[i]); } } else { for (int i = 0; i < containerCount; i++) { SetBindingContextForView(_rootLayout.Children[i], container[i]); } } } else // RECREATE COLUMNS { if (_useGridAsMainRoot) { if (_rootLayoutAuto.Children.Count > 0) { _rootLayoutAuto.Children.Clear(); } } else { if (_rootLayout.Children.Count > 0) { _rootLayout.Children.Clear(); } } _currentColumnTemplates = new List <DataTemplate>(templates); for (int i = 0; i < containerCount; i++) { var view = (View)templates[i].CreateContent(); view.GestureRecognizers.Add(new TapGestureRecognizer() { Command = new Command(async(obj) => { await ExecuteTapGestureRecognizer(view); }) }); SetBindingContextForView(view, container[i]); AddViewToLayout(view, containerCount, i); } } }
private void UpdateData() { var container = BindingContext as IList; if (container == null) { return; } var newDesiredColumnCount = 0; FlowListView flowListView = null; if (_flowListViewRef.TryGetTarget(out flowListView) && flowListView != null) { _flowColumnTemplate = flowListView.FlowColumnTemplate; newDesiredColumnCount = flowListView.FlowDesiredColumnCount; _flowColumnExpand = flowListView.FlowColumnExpand; } var flowGroupColumn = BindingContext as FlowGroupColumn; if (flowGroupColumn != null) { newDesiredColumnCount = flowGroupColumn.ColumnCount; } // Getting view types from templates var containerCount = container.Count; IList <DataTemplate> templates = GetDataTemplates(container); bool layoutChanged = RowLayoutChanged(containerCount, templates, newDesiredColumnCount); _desiredColumnCount = newDesiredColumnCount; if (!layoutChanged) // REUSE VIEWS { if (_useGridAsMainRoot) { for (int i = 0; i < containerCount; i++) { SetBindingContextForView(_rootLayoutAuto.Children[i], container[i]); } } else { for (int i = 0; i < containerCount; i++) { SetBindingContextForView(_rootLayout.Children[i], container[i]); } } } else // RECREATE COLUMNS { _currentColumnTemplates = new List <DataTemplate>(templates); if (_useGridAsMainRoot) { if (_rootLayoutAuto.Children.Count > 0) { _rootLayoutAuto.Children.Clear(); } var colDefs = new ColumnDefinitionCollection(); for (int i = 0; i < _desiredColumnCount; i++) { colDefs.Add(new ColumnDefinition() { Width = new GridLength(1d, GridUnitType.Star) }); } _rootLayoutAuto.ColumnDefinitions = colDefs; for (int i = 0; i < containerCount; i++) { var view = (View)templates[i].CreateContent(); view.GestureRecognizers.Add(new TapGestureRecognizer() { Command = new Command(async(obj) => { await ExecuteTapGestureRecognizer(view); }) }); SetBindingContextForView(view, container[i]); if (containerCount == 0 || _desiredColumnCount == 0) { return; } AddViewToLayoutAutoHeightEnabled(view, containerCount, i); } } else { if (_rootLayout.Children.Count > 0) { _rootLayout.Children.Clear(); } for (int i = 0; i < containerCount; i++) { var view = (View)templates[i].CreateContent(); view.GestureRecognizers.Add(new TapGestureRecognizer() { Command = new Command(async(obj) => { await ExecuteTapGestureRecognizer(view); }) }); SetBindingContextForView(view, container[i]); if (containerCount == 0 || _desiredColumnCount == 0) { return; } AddViewToLayoutAutoHeightDisabled(view, containerCount, i); } } } }
/// <summary> /// Override this method to execute an action when the BindingContext changes. /// </summary> /// <remarks></remarks> protected override void OnBindingContextChanged() { base.OnBindingContextChanged(); var container = BindingContext as IList; if (container == null) return; FlowListView flowListView = null; if (_flowListViewRef.TryGetTarget(out flowListView) && flowListView != null) { _flowColumnTemplate = flowListView.FlowColumnTemplate; _desiredColumnCount = flowListView.DesiredColumnCount; _flowColumnExpand = flowListView.FlowColumnExpand; } // Getting view types from templates var containerCount = container.Count; IList<DataTemplate> templates = GetDataTemplates(container); bool layoutChanged = RowLayoutChanged(containerCount, templates); if (!layoutChanged) // REUSE VIEWS { if (_useGridAsMainRoot) { for (int i = 0; i < containerCount; i++) { SetBindingContextForView(_rootLayoutAuto.Children[i], container[i]); } } else { for (int i = 0; i < containerCount; i++) { SetBindingContextForView(_rootLayout.Children[i], container[i]); } } } else // RECREATE COLUMNS { if (_useGridAsMainRoot) { if (_rootLayoutAuto.Children.Count > 0) _rootLayoutAuto.Children.Clear(); } else { if (_rootLayout.Children.Count > 0) _rootLayout.Children.Clear(); } _currentColumnTemplates = new List<DataTemplate>(templates); if (_useGridAsMainRoot) { if (_rootLayoutAuto.Children.Count > 0) _rootLayoutAuto.Children.Clear(); var colDefs = new ColumnDefinitionCollection(); for (int i = 0; i < _desiredColumnCount; i++) { colDefs.Add(new ColumnDefinition() { Width = new GridLength(1d, GridUnitType.Star) }); } _rootLayoutAuto.ColumnDefinitions = colDefs; for (int i = 0; i < containerCount; i++) { var view = (View)templates[i].CreateContent(); view.GestureRecognizers.Add(new TapGestureRecognizer() { Command = new Command(async (obj) => { await ExecuteTapGestureRecognizer(view); }) }); SetBindingContextForView(view, container[i]); if (containerCount == 0 || _desiredColumnCount == 0) return; AddViewToLayoutAutoHeightEnabled(view, containerCount, i); } } else { if (_rootLayout.Children.Count > 0) _rootLayout.Children.Clear(); for (int i = 0; i < containerCount; i++) { var view = (View)templates[i].CreateContent(); view.GestureRecognizers.Add(new TapGestureRecognizer() { Command = new Command(async (obj) => { await ExecuteTapGestureRecognizer(view); }) }); SetBindingContextForView(view, container[i]); if (containerCount == 0 || _desiredColumnCount == 0) return; AddViewToLayoutAutoHeightDisabled(view, containerCount, i); } } } }