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