绑定表源继承什么类

2024-01-02

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

This video http://www.youtube.com/watch?v=Vd1p2Gz8jfY关于如何创建自定义单元格的信息非常丰富,但似乎已经过时了。大约 42 分钟时,Stuart 为其表创建了一个数据源,该数据源源自MvxSimpleBindableTableSource,但那个类似乎不存在,或者至少,我找不到它。那么使用 mvvmcross 绑定到 UITableView 的“最佳”方法是什么?

另外,我在常规 MvxViewController 中使用 UITableView,因为我似乎无法让 MvxTableViewController 与 xib 一起使用,这这个问题 https://stackoverflow.com/questions/16739767/mvvmcross-how-do-i-use-the-mvxtableviewcontroller-with-a-nibname似乎表明目前不可能。


可用的 v3 表源有:

抽象类

  • MvxBaseTableViewSource https://github.com/slodge/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross.Binding.Touch/Views/MvxBaseTableViewSource.cs
    • 仅基本功能
    • no ItemsSource- 一般不直接使用
  • MvxTableViewSource.cs https://github.com/slodge/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross.Binding.Touch/Views/MvxTableViewSource.cs
    • 从基表继承并添加ItemsSource用于数据绑定
    • 继承类只需要实现protected abstract UITableViewCell GetOrCreateCellFor(UITableView tableView, NSIndexPath indexPath, object item);

具体类

  • MvxStandardTableViewSource.cs https://github.com/slodge/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross.Binding.Touch/Views/MvxStandardTableViewSource.cs
    • 继承自MvxTableViewSource
    • 通过提供“标准 iPhone 手机类型”UITableViewCellStyle
    • 在这些你可以绑定TitleText, DetailText, ImageUrl和(带有一些戏弄的)配件
  • MvxSimpleTableViewSource.cs https://github.com/slodge/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross.Binding.Touch/Views/MvxSimpleTableViewSource.cs
    • 继承自MvxTableViewSource
    • 为集合中的所有项目提供单一单元格类型 - viastring nibName in the ctor
    • 在这些单元格中,您可以绑定您喜欢的内容 - 观看视频(稍后)
  • MvxActionBasedTableViewSource.cs https://github.com/slodge/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross.Binding.Touch/Views/MvxActionBasedTableViewSource.cs- 提供一些Func<>样式挂钩允许您实现GetOrCreateCellFor无需继承新类MvxTableViewSource

一般我用:

  • in demos:
    • a MvxStandardTableViewSource- 因为我无需创建自定义单元即可获得列表
  • in real code:
    • a MvxSimpleTableViewSource当我只需要一种细胞类型时
    • 继承自的自定义类MvxTableViewSource当我需要多种细胞类型时 - 例如见下文

具有多种单元格类型的通用 TableSource 通常看起来像PolymorphicListItemTypesView.cs https://github.com/slodge/MvvmCross-Tutorials/blob/master/Working%20With%20Collections/Collections.Touch/Views/Samples/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);
        }
    }
}

该视频有关如何创建自定义单元格的信息非常丰富,但似乎已经过时了

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

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

除此之外:

  • N+1 系列中有很多表格使用的演示 - 索引为http://mvvmcross.wordpress.com http://mvvmcross.wordpress.com

    • N=2 和 N=3 是非常基本的
    • N=6 和 N=6.5 涵盖了一个书单(一个很好的起点)
    • N=11 涵盖集合视图
    • N=12 到 N=17 使用数据库中的列表/表创建一个大型应用程序
  • “使用集合”示例有相当多的表和列表代码 -https://github.com/slodge/MvvmCross-Tutorials/tree/master/Working%20With%20Collections https://github.com/slodge/MvvmCross-Tutorials/tree/master/Working%20With%20Collections

  • Evolve 演示期间使用表格 -http://xamarin.com/evolve/2013#session-dnoeeoarfj http://xamarin.com/evolve/2013#session-dnoeeoarfj

  • 还有其他可用示例 - 请参阅https://github.com/slodge/MvvmCross-Tutorials/ https://github.com/slodge/MvvmCross-Tutorials/(或者在 GitHub 上搜索 mvvmcross - 其他人也在发布示例)

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

我认为这个问题已经得到解决 - 请参阅Mcx TableViewController.vs#L33 https://github.com/slodge/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross.Touch/Views/MvxTableViewController.cs#L33

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

绑定表源继承什么类 的相关文章

随机推荐

  • 联合中的标量成员是否计入公共初始序列?

    In the union U下面 如果a or b是活动成员 是否定义了访问行为c struct A int a struct B int a double b union U A a B b int c In 类 联盟 https tim
  • Materialise 中的 Roboto 字体在 Firefox 中的显示问题

    我在用物化 http materializecss com设计我的一些网页的样式 我注意到 Roboto 字体在 Firefox v43 0 3 中无法正确呈现 但在 Chrome 中看起来不错 两个浏览器都从我的服务器下载 woff2 字
  • 访问查询会自动被截断吗?

    以前可能有人问过这个问题 但我似乎无法在任何地方找到任何相关答案 几周前 我在 Access 2003 中编写了几个长查询 我今天想使用这些查询 发现它们被截断了 查询按其应有的方式开始 并在中间的某个地方显示AS Alias 其余的都不见
  • 使用 LLVM 创建本地字符串

    我正在尝试使用 LLVM 创建一个局部变量来存储字符串 但我的代码当前抛出语法错误 lli test2 ll 8 23 error constant expression type mismatch 1 load 6 x i8 c hell
  • 使用 p:calendar 相互限制开始和结束日期时间(无验证)

    我们需要向用户呈现两个 p calendar 组件 分别代表开始日期和结束日期 两个日期时间都有日期 小时和分钟 PrimeFaces 拥有完美mindate maxdate minHour maxHour minMinute and mi
  • 如何使用正则表达式找到除某些短语之外的所有内容?

    好的 所以我有一个短语 foo bar 我想找到除 foo bar 之外的所有内容 这是我的文字 ipsum dolor foo bar Lorem ipsum dolor sat amet 脂肪精英协会eiusmod tempor foo
  • 从phpmyadmin导出数据时返回sql查询页面

    我在 phpMyAdmin 上运行以下查询我获得了数据 但是当单击 导出 时 它会重定向到 sql 查询选项卡 Select sad firstname sad lastname sfo base total invoiced sad em
  • C# 加密登录

    我正在尝试创建一个简单的 asp net 网站 允许用户注册和登录 我已成功地将所有数据存储在数据库中 并在登录表单中对用户进行身份验证 然而我现在想做的是每当新用户注册时将密码以 MD5 格式存储在数据库中并匹配哈希值以便用户能够登录 这
  • 在 Python 2.4 中使用 urllib 解析查询字符串

    使用Python2 4 5 不要问 我想解析一个查询字符串并获得一个字典作为返回 我必须像下面这样 手动 进行操作吗 gt gt gt qs first 1 second 4 third 3 gt gt gt d dict x split
  • Python Pandas 重置运行总计

    我想执行以下任务 给定 2 列 好和坏 我想用运行总计替换这两列的任何行 这是当前数据帧以及所需数据帧的示例 编辑 我应该添加我的意图 我正在尝试使用连续变量作为输入来创建同等分箱 在本例中为 20 的变量 我知道 pandas cut 和
  • PHP 循环遍历 HTML 文本框数组

    我有一个 HTML 表单 其中包含动态数量的复选框字段 所有这些字段都封装在提交表单中 提交表单后 我想使用 PHP 脚本循环遍历每个复选框字段的值 同时 我必须保留与复选框字段关联的特定 ID 以便当我循环遍历脚本中的每个字段时 我可以使
  • 使用llvm从桌面交叉编译到arm

    我正在笔记本电脑上编写 C 代码 我想使用 llvm clang 工具链将其交叉编译为 ARM v7 架构 我正在关注这个网站http llvm org docs HowToCrossCompileLLVM html http llvm o
  • 如何将[setup]中AppID的内容转换为[code]中的字符串?

    当我使用 INNO 向导时 我得到一个 iss 文件 其中包含其设置部分 Setup AppId 87E1AD40 F32B 4EF7 A2FF 5B508814068A
  • 如何解决 Visual C++ 编译器中的错误 C1001?

    我刚刚将 Microsoft Visual Studio Enterprise 2015 从 Update 2 升级到 Update 3 现在收到以下错误 致命错误 C1001 编译器中发生内部错误 编译器文件 f dd vctools c
  • mmap 比 ioremap 慢

    我正在为运行 Linux 2 6 37 的 ARM 设备进行开发 我正在尝试尽快切换 IO 引脚 我制作了一个小内核模块和一个用户空间应用程序 我尝试了两件事 使用以下命令直接从内核空间操作 GPIO 控制寄存器ioremap mmap G
  • 如何在会话中存储检索对象并随后访问它?

    我正在尝试创建一个简单的登录页面 我检索一个User使用 hibernate 从我的数据库中获取对象 这部分工作正常 我这样做如下 data from login form String username request getParame
  • 设置 xlObj = CreateObject("excel.application") 需要高程 (vbscript)

    每次我尝试在 vbscript 中运行包含 Set xlObj CreateObject excel application 行的脚本时 都会收到一条错误消息 提示 Line Requires Elevation 我认为这是一个权限问题 但
  • Python Pandas 计算日期之间的平均天数

    使用以下 python pandas dataframe df Customer ID Transaction ID ABC 2016 05 06 1234 ABC 2017 06 08 3456 ABC 2017 07 12 5678 A
  • 最佳实践是使用 Thread.sleep() 还是在单击 selenium Web 驱动程序中的任何元素之前显式等待

    我是网络驱动程序的新手 我为网络应用程序编写了一个selenium脚本 其中包含backbone js和select2 我曾经经常遇到 NosuchElementException 和 Element is not clickable 异常
  • 绑定表源继承什么类

    我正在使用 Xamarin 和 mvvmcross 以及如何拥有最终绑定到可观察集合的表的视图 This video http www youtube com watch v Vd1p2Gz8jfY关于如何创建自定义单元格的信息非常丰富 但