Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 绑定表源要从哪个类继承_Ios_Xamarin_Mvvmcross - Fatal编程技术网

Ios 绑定表源要从哪个类继承

Ios 绑定表源要从哪个类继承,ios,xamarin,mvvmcross,Ios,Xamarin,Mvvmcross,我使用的是Xamarin和mvvmcross,以及最终绑定到可观察集合的表的视图 这对于如何创建自定义单元格非常有用,但似乎已经过时了。大约42分钟后,Stuart为他的表创建了一个数据源,该数据源来自MVXSimpleBindableTableTableSource,但该类似乎不存在,或者至少我找不到它。那么,使用mvvmcross绑定到UITableView的“最佳”方式是什么 此外,我在常规MvxViewController中使用UITableView,因为我似乎无法让MvxTableVi

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

这对于如何创建自定义单元格非常有用,但似乎已经过时了。大约42分钟后,Stuart为他的表创建了一个数据源,该数据源来自
MVXSimpleBindableTableTableSource
,但该类似乎不存在,或者至少我找不到它。那么,使用mvvmcross绑定到UITableView的“最佳”方式是什么


此外,我在常规MvxViewController中使用UITableView,因为我似乎无法让MvxTableViewController与xib一起工作,这似乎表明目前不可能实现。可用的v3表源有:

抽象类

    • 仅基本功能
    • ItemsSource
      -通常不直接使用
    • 从基表继承并添加数据绑定的
      ItemsSource
    • 继承类只需实现受保护的抽象UITableViewCell GetOrCreateCellFor(UITableView tableView、NSIndexPath indexPath、对象项)
具体类别

    • 继承自
      MvxTableViewSource
    • 通过
      UITableViewCellStyle
    • 在这些文件中,您可以绑定
      TitleText
      DetailText
      ImageUrl
      和(带有一些调侃的)附件
    • 继承自
      MvxTableViewSource
    • 为集合中的所有项目提供单个单元格类型-通过
      ctor中的
      string nibName
    • 在这些单元格中,您可以绑定自己喜欢的内容-请参阅视频(稍后)
  • -提供一些
    Func
    样式挂钩,允许您实现
    GetOrCreateCellFor
    ,而无需从
    MvxTableViewSource

我通常使用:

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

具有多种单元格类型的常规表源通常如下所示:

公共类多态ClisitItemTypesView
:MvxTableViewController
{
公共多态性ClisitItemTypesView()
{
Title=“多边形列表”;
}
公共覆盖无效ViewDidLoad()
{
base.ViewDidLoad();
变量源=新表源(TableView);
此.AddBindings(新字典
{
{来源,“ItemsSource动物”}
});
TableView.Source=Source;
TableView.ReloadData();
}
公共类表源:MvxTableViewSource
{
私有静态只读NSString KITTENCELLIDENIER=新NSString(“KittenCell”);
私有静态只读NSString DogCellIdentifier=新NSString(“DogCell”);
公共表源(UITableView表视图)
:基础(表格视图)
{
tableView.RegisternbforcellReuse(UINib.FromName(“KittenCell”,NSBundle.MainBundle),
Kittencellier);
tableView.RegisternbforcellReuse(UINib.FromName(“DogCell”,NSBundle.MainBundle),DogCellIdentifier);
}
公共覆盖浮点GetHeightForRow(UITableView tableView,NSIndexPath indexPath)
{
返回KittenCell.GetCellHeight();
}
受保护的覆盖UITableViewCell GetOrCreateCellFor(UITableView tableView,NSIndexPath indexPath,
对象项)
{
NSString单元标识符;
如果(项目是小猫)
{
cellIdentifier=KittenCellIdentifier;
}
否则,如果(项目是狗)
{
cellIdentifier=DogCellIdentifier;
}
其他的
{
抛出新ArgumentException(“类型未知的动物”+item.GetType().Name);
}
return(UITableViewCell)TableView.DequeueReusableCell(cellIdentifier,indexPath);
}
}
}

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

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

该文章的代码已更新-请参阅

除此之外:

  • 在N+1系列中有很多表的使用演示-索引为

    • N=2和N=3是非常基本的
    • N=6和N=6.5包括一个书单(一个好的开始)
    • N=11包括集合视图
    • N=12到N=17使用数据库中的列表/表格制作大型应用程序
  • “使用集合”示例有很多表和列表代码-

  • 在演示过程中使用表格-

  • 还有其他示例可用-请参阅(或在GitHub上搜索mvvmcross-其他示例也在发布)

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

我想这已经被解决了-看

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