gpt4 book ai didi

c# - MvxTableViewCell 加载一个空 View

转载 作者:行者123 更新时间:2023-11-29 00:17:24 25 4
gpt4 key购买 nike

我需要一个自定义的 iOS TableView,其中包含不同的单元格,具体取决于项目类型。看起来很简单,只需在 TableViewSource 构造函数中定义布局,它是 MvxTableViewSource 的子项。注册是这样的:

public TableViewSource(UITableView tableView, List<ItemHolder> sections) : base(tableView) {
tableView.RegisterClassForCellReuse(typeof(MyCell), "MyCellId");
[Registering further types here]
}

为了处理部分,我创建了一个 ItemHolder 来定义部分中的项目,以及部分页眉/页脚。那部分工作得很好。

在 GetOrCreateCellFor 中,我根据给定项的类型使用默认的 DequeueReusableCell。但是,如果我像上面那样注册单元格,则会绘制一个空单元格。

我的单元格使用 XIB+Backing 类(基于 MvxTableViewCell)方式,理论上应该可以正常工作。如果我使用它的 Nib 属性,并使用 RegisterNibForCellReuse,则会绘制内容(但是行高错误,并且不会发生绑定(bind),因为它是在支持类中定义的)。

这个类看起来像这样:

public partial class MyCell : MvxTableViewCell
{
public static readonly NSString Key = new NSString("MyCell");
public static readonly UINib Nib = UINib.FromName("MyCell", NSBundle.MainBundle);

protected MyCell(IntPtr handle) : base(handle)
{
this.DelayBind(() =>
{
var binding = this.CreateBindingSet<MyCell, object>();
binding.Bind(this.TextView.Text).To(vm => vm.GetType().Name).WithConversion(new StringFormatConverter(), "Unknown cell type: {0}");
binding.Apply();
});
}

public static MyCell Create()
{
return (MyCell)Nib.Instantiate(null, null)[0];
}
}

在 XIB 中,我有一个使用 AutoLayout 设置的 UILabelView,它有一个名为 TextView 的 Outlet。

所以基本上,如果我通过类本身添加它,它根本不起作用。如果我使用 Nib,那么布局可以工作,但没有绑定(bind)、数据上下文等,从技术上讲我的逻辑已经不存在了。

我是不是做错了什么,或者这根本不起作用?

最佳答案

立即引人注目的一件事是定义绑定(bind)的方式。您不需要绑定(bind) TextView.Text,只需传入 TextView:

binding.Bind(TextView).To(vm => vm.GetType().Name).WithConversion(new StringFormatConverter(), "Unknown cell type: {0}");

这个修复可能会让一切为你工作。否则,这就是我在 MvvmCross 中对 XIB 文件中定义的单元格布局有用的方法:

1.) 我使用 RegisterNibForCellReuse 来注册我的单元格。

2.) 而不是在构造函数中使用 this.DelayBind(() =>。我在 AwakeFromNib 覆盖中进行绑定(bind):

public override void AwakeFromNib()
{
base.AwakeFromNib();

var binding = this.CreateBindingSet<MyCell, MyCellViewModel>();
binding.Bind(TextView).To(vm => vm.GetType().Name).WithConversion(new StringFormatConverter(), "Unknown cell type: {0}");
binding.Apply();
}

关于c# - MvxTableViewCell 加载一个空 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44972151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com