从绑定表源继承的类

Mat*_*and 5 ios mvvmcross xamarin

我正在使用Xamarin和mvvmcross以及如何使用最终绑定到可观察集合的表的视图.

视频提供了有关如何创建自定义单元格的信息,但似乎已过时.在大约42分钟时,Stuart为他的表创建了一个数据源MvxSimpleBindableTableSource,但该类似乎不存在,或者至少,我找不到它.那么用mvvmcross绑定到UITableView的"最佳"方式是什么?

此外,我在常规的MvxViewController中使用UITableView,因为我似乎无法让MvxTableViewController与xib一起工作,这个问题似乎表明目前不可能.

Stu*_*art 15

可用的v3表源是:

抽象类

  • MvxBaseTableViewSource
    • 仅基本功能
    • ItemsSource- 一般不直接使用
  • MvxTableViewSource.cs
    • 继承自basetable和addes ItemsSource进行数据绑定
    • 继承类只需要实现 protected abstract UITableViewCell GetOrCreateCellFor(UITableView tableView, NSIndexPath indexPath, object item);

具体课程

  • MvxStandardTableViewSource.cs
    • 继承自 MvxTableViewSource
    • 通过提供'标准iPhone手机类型' UITableViewCellStyle
    • 在这些可以绑定TitleText,DetailText,ImageUrl(用一些挑逗)附件
  • MvxSimpleTableViewSource.cs
    • 继承自 MvxTableViewSource
    • 为集合中的所有项目单一细胞类型-通过string nibNamector
    • 在这些单元格中,您可以绑定您喜欢的内容 - 请参阅视频(稍后)
  • MvxActionBasedTableViewSource.cs - 提供一些Func<>样式挂钩,允许您在GetOrCreateCellFor不继承新类的情况下实现MvxTableViewSource

一般我用:

  • 在演示中:
    • a MvxStandardTableViewSource- 因为我得到一个列表而不必创建自定义单元格
  • 在实际代码中:
    • MvxSimpleTableViewSource,当我只需要一种细胞类型
    • MvxTableViewSource我需要多个单元格类型时继承的自定义类- 例如,见下文

具有多个单元格类型的常规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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

此视频提供了有关如何创建自定义单元格的信息,但似乎已过时

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

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

除此之外:

此外,我在常规的MvxViewController中使用UITableView,因为我似乎无法让MvxTableViewController与xib一起工作,这个问题似乎表明目前不可能.

我认为这已经修复 - 请参阅MvxTableViewController.cs#L33