Skip to content
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
111 lines (92 sloc) 5.17 KB
layout title category
iOS Tables and Cells

Available table source classes in MvvmCross

Abstract classes

  • MvxBaseTableViewSource
    • base functionality only
    • no ItemsSource - generally not used directly
  • MvxTableViewSource.cs
    • inherits from the basetable and adds ItemsSource for data-binding
    • inheriting classes need only to implement protected abstract UITableViewCell GetOrCreateCellFor(UITableView tableView, NSIndexPath indexPath, object item);
  • MvxExpandableTableViewSource.cs
    • inherits from MvxTableViewSource.cs
    • changes ItemSource to IEnumerable<TItemSource> ItemsSource for data-binding groups
    • inheriting classes need to implement protected abstract UITableViewCell GetOrCreateCellFor(UITableView tableView, NSIndexPath indexPath, object item); and register a header cell and table cell

Concrete classes

  • MvxStandardTableViewSource.cs
    • inherits from MvxTableViewSource
    • provides the 'standard iPhone cell types' via UITableViewCellStyle
    • within these you can bind TitleText, DetailText, and (with some teasing) Accessory
  • MvxSimpleTableViewSource.cs
    • inherits from MvxTableViewSource
    • provides a single cell type for all items in the collection - via string nibName in the ctor
    • within these cells you can bind what you like - see videos (later)
  • MvxActionBasedTableViewSource.cs
    • provides some Func<>style hooks to allow you to implement GetOrCreateCellFor without inheriting a new class from MvxTableViewSource

Custom table source example

A typical TableSource with multiple cell types typically looks like:

public class PolymorphicListItemTypesView : MvxTableViewController
    public PolymorphicListItemTypesView()
        Title = "Poly List";

    public override void ViewDidLoad()

        var source = new TableSource(TableView);
        this.AddBindings(new Dictionary<object, string>
                {source, "ItemsSource Animals"}

        TableView.Source = source;
        TableView.RowHeight = KittenCell.GetCellHeight();

    public class TableSource : MvxTableViewSource
        private static readonly NSString KittenCellIdentifier = new NSString("KittenCell");
        private static readonly NSString DogCellIdentifier = new NSString("DogCell");

        public TableSource(UITableView tableView)
            : base(tableView)
            tableView.SeparatorStyle = UITableViewCellSeparatorStyle.None;
            tableView.RegisterNibForCellReuse(UINib.FromName("KittenCell", NSBundle.MainBundle),
            tableView.RegisterNibForCellReuse(UINib.FromName("DogCell", NSBundle.MainBundle), DogCellIdentifier);

        protected override UITableViewCell GetOrCreateCellFor(UITableView tableView, NSIndexPath indexPath,
                                                              object item)
            NSString cellIdentifier;
            if (item is Kitten)
                cellIdentifier = KittenCellIdentifier;
            else if (item is Dog)
                cellIdentifier = DogCellIdentifier;
                throw new ArgumentException("Unknown animal of type " + item.GetType().Name);

            return (UITableViewCell) TableView.DequeueReusableCell(cellIdentifier, indexPath);


For examples of creating custom tables and cells:

  • there's a lot of demos of table use in the N+1 series
    • N=2 and N=3 are very basic
    • N=6 and N=6.5 covers a book list (a good place to start)
    • N=11 covers collection views
    • N=12 to k=17 make a large app with a list/table from a database
  • the Working with Collections sample has quite a lot of Table and List code
  • there are other samples available - see MvvmCross-Samples (or just search on the web for mvvmcross - others are also posting samples)
  • Custom Cells Without Using NIB files - benjaminhysell blog
You can’t perform that action at this time.