MonoMobile.Views.ListSource.RowSelected C# (CSharp) Method

RowSelected() public method

public RowSelected ( UITableView tableView, NSIndexPath indexPath ) : void
tableView UITableView
indexPath NSIndexPath
return void
		public override void RowSelected(UITableView tableView, NSIndexPath indexPath)
		{	
			object data = null;

			if (DisplayMode == DisplayMode.Collapsable)
			{
				var section = Sections[0];
				var list = section.DataContext;	
				var indexPaths = new List<NSIndexPath>();
				
				if (IsCollapsed)
				{
					foreach(var item in CollapsedList)
					{
						var row = list.Add(item);
						indexPaths.Add(NSIndexPath.FromRowSection(row, section.Index));
					}
					IsCollapsed  = false;
					CollapsedList.Clear();
					Controller.TableView.InsertRows(indexPaths.ToArray(), UITableViewRowAnimation.Top);
				}
				else
				{
					foreach(var item in list)
					{
						var row = CollapsedList.Add(item);
						indexPaths.Add(NSIndexPath.FromRowSection(row, section.Index));
					}
					IsCollapsed = true;
					list.Clear();
					Controller.TableView.DeleteRows(indexPaths.ToArray(), UITableViewRowAnimation.Top);
				}

			//	Controller.TableView.ReloadRows(new NSIndexPath[] { NSIndexPath.FromRowSection(0, section.Index) }, UITableViewRowAnimation.Fade);
				return;
			}
			if (!IsRootCell)
			{
				SelectedItem = GetSectionData(0)[indexPath.Row]; 

				if (SelectedItems.Contains(SelectedItem))
				{
					SelectedItems.Remove(SelectedItem);

					switch (UnselectionBehavior)
					{
						case UnselectionBehavior.SetSelectedToCurrentValue : break;
						case UnselectionBehavior.SetSelectedToNull : SelectedItem = null; break;
						case UnselectionBehavior.SetSelectedToPreviousValueOrNull :
						{
							if (SelectedItems.Count > 0)
							{
								SelectedItem = SelectedItems[SelectedItems.Count - 1];
							}
							else
							{
								SelectedItem = null;
							}

							break;
						}
					}

				}
				else
				{
					SelectedItems.Add(SelectedItem);
				}

				SetItems();

				if (Controller != null)
				{
					lock(this)
					{
						if (PopOnSelection && !(!IsSelectable || IsNavigable || IsMultiselect))
						{
							new Wait(TimeSpan.FromMilliseconds(0), ()=>    
							{
								Controller.NavigationController.PopViewControllerAnimated(true);
							});
						}
					
						if (IsSelectable || IsMultiselect || !IsNavigable)
						{
							Controller.ReloadData();
						}
						else
						{
							new Wait(TimeSpan.FromMilliseconds(0), () => 
							{
								Controller.ReloadData();
							});
						}
					}
				}

				data = SelectedItem;
			}
			else
				data = GetSectionData(0);
			
			if (SelectionAction == SelectionAction.None)
				return;

			if (SelectionAction == SelectionAction.Custom)
			{
				IsSelectable = false;
				IsMultiselect = false;
				IsNavigable = false;
				Controller.Selected(SelectedItem, indexPath);
				return;
			}

			var dataType = data.GetType();
			if ((dataType.IsPrimitive || dataType.IsEnum) && SelectionAction == SelectionAction.NavigateToView)
			{
				IsSelectable = true;
				SelectionAction = SelectionAction.Selection;
			}

			if (IsNavigable && (data is IEnumerable && (!(data is string))))
			{
				NavigateToList();
				return;
			}			
			
			if (SelectionAction == SelectionAction.NavigateToView && (SelectedItem != null))
			{
				NavigateToView();
			}
		}