public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
{
NSIndexPath [] indexPathsToReload = null;
if (AllowsMultipleSelection) {
var item = AllItems [indexPath.Row];
// Togle selection
if (!SelectedItems.Remove (item))
SelectedItems.Add (item);
indexPathsToReload = new NSIndexPath [] { indexPath };
} else {
indexPathsToReload = (SelectedItems.Count == 0)
? new NSIndexPath [] { indexPath }
: SelectedItems.Select (f => Array.IndexOf(AllItems, f))
.Select (i => NSIndexPath.FromRowSection (i, 0))
.Concat (indexPath)
.ToArray ();
SelectedItems.Clear ();
SelectedItems.Add (AllItems [indexPath.Row]);
}
// Deselect the selected row & reload the table view cells for the old and new items to swap checkmarks.
tableView.DeselectRow (indexPath, true);
tableView.ReloadRows (indexPathsToReload, UITableViewRowAnimation.Automatic);
}