从哪个类inheritance绑定的表源

我使用Xamarin和mvvmcross,以及最终绑定到可观察集合的表格。

这个video是非常丰富的如何创build自定义单元格,但似乎是过时的。 大约42分钟,Stuart为他的表格创build了一个源自MvxSimpleBindableTableSource的数据源,但是这个类似乎并不存在,或者至less我找不到它。 那么用mvvmcross绑定到UITableView的“最佳”方法是什么?

另外,我在一个普通的MvxViewController中使用了一个UITableView,因为我似乎无法得到MvxTableViewController来处理一个xib, 这个问题似乎表明目前是不可能的。

可用的v3表格源是:

抽象类

  • MvxBaseTableViewSource
    • 仅基本function
    • 没有ItemsSource – 一般不直接使用
  • MvxTableViewSource.cs
    • 从Basetableinheritance,并添加用于数据绑定的ItemsSource
    • inheritance类只需要实现protected abstract UITableViewCell GetOrCreateCellFor(UITableView tableView, NSIndexPath indexPath, object item);

具体类

  • MvxStandardTableViewSource.cs
    • inheritance自MvxTableViewSource
    • 通过UITableViewCellStyle提供“标准iPhone单元格types”
    • 在这些你可以绑定TitleTextDetailTextImageUrl和(有些戏弄)配件
  • MvxSimpleTableViewSource.cs
    • inheritance自MvxTableViewSource
    • 为集合中的所有项目提供单个单元格types – 通过ctor string nibName
    • 在这些细胞内,你可以绑定你喜欢的东西 – 看video(稍后)
  • MvxActionBasedTableViewSource.cs – 提供了一些Func<>样式钩子,允许您实现GetOrCreateCellFor而不从MvxTableViewSourceinheritance新的类

一般我使用:

  • 在演示中:
    • 一个MvxStandardTableViewSource – 因为我得到一个列表,而不必创build一个自定义的单元格
  • 在实际的代码中:
    • 一个MvxSimpleTableViewSource当我只需要一个单元格types
    • 当我需要多个单元格types时,从MvxTableViewSourceinheritance的自定义类 – 例如参见下文

具有多个单元格types的常规TableSource通常看起来像PolymorphicListItemTypesView.cs :

 public class PolymorphicListItemTypesView : MvxTableViewController { public PolymorphicListItemTypesView() { Title = "Poly List"; } public override void ViewDidLoad() { base.ViewDidLoad(); var source = new TableSource(TableView); this.AddBindings(new Dictionary<object, string> { {source, "ItemsSource Animals"} }); TableView.Source = source; TableView.ReloadData(); } 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.RegisterNibForCellReuse(UINib.FromName("KittenCell", NSBundle.MainBundle), KittenCellIdentifier); tableView.RegisterNibForCellReuse(UINib.FromName("DogCell", NSBundle.MainBundle), DogCellIdentifier); } public override float GetHeightForRow(UITableView tableView, NSIndexPath indexPath) { return KittenCell.GetCellHeight(); } 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; } else { throw new ArgumentException("Unknown animal of type " + item.GetType().Name); } return (UITableViewCell) TableView.DequeueReusableCell(cellIdentifier, indexPath); } } } 

这个video是非常丰富的如何创build自定义单元格,但似乎是过时的

它只是在Xamarin 2.0和V3之前制作的,但是原理非常相似。

该文章的代码已更新 – 请参阅https://github.com/slodge/MvvmCross-Tutorials/tree/master/MonoTouchCellTutorial

除此之外:

另外,我在一个普通的MvxViewController中使用了一个UITableView,因为我似乎无法得到MvxTableViewController来处理一个xib,这个问题似乎表明目前是不可能的。

我认为这个问题已经得到解决 – 参见MvxTableViewController.cs#L33