0

我创建了一个MvxTableViewCell子类,我计划在我的应用程序的许多点重用它,所以我想将绑定任务委托给单元格的创建者。

到目前为止,我根据一些N+1 教程示例完成了这项工作,主要是来自N=17-Collect a Bull 第 3 部分教程的代码

所以此时,创建一个单元格如下所示:

return new SubtitleCell("TitleText Name; SubtitleText Subject.Descripcion"))

但是我不太喜欢在字符串中定义的绑定,因为我通常会进行很多重构,这可能会在不久的将来造成麻烦,所以我决定像普通的可绑定视图一样声明绑定,如下所示:

var cell = new SubtitleCell();
var set = cell.CreateBindingSet<SubtitleCell, SubjectGroup>();
set.Bind().For(c => c.TitleText).To(g => g.Name);
set.Bind().For(c => c.SubtitleText).To(g => g.Subject.Descripcion);
set.Apply();
return cell;

这现在像以前一样工作,现在它是重构安全的,但它是我之前的代码行数的六倍,并且必须在已经创建单元格实例时定义绑定。

我认为可以使用它来完成,MvxBindingDescription因为第一个示例中使用的绑定文本被解析为 a IEnumerable<MvxBindingDescription>,但我无法找到有关它的示例或文档。

谁能指出我正确的方向?

谢谢。

编辑: LoC 不是我最关心的问题,但必须在定义绑定之前实例化每个单元格,我很高兴有这样的东西:

var set = Mvx.CreateBindingSet<SubtitleCell, SubjectGroup>();
set.Bind().For(c => c.TitleText).To(g => g.Name);
set.Bind().For(c => c.SubtitleText).To(g => g.Subject.Descripcion);

所以我可以稍后应用它,可能是这样的:

var cell = new SubtitleCell();
cell.ApplyBindingSet(set);

有什么可以这样做的吗?

更新: 刚刚注意到第二个绑定示例在我的日志控制台中填充了这个错误:

MvxBind:警告:0.40 无法绑定:找不到源属性源
空对象上的 Cirrious.MvvmCross.Binding.Parse.PropertyPath.PropertyTokens.MvxPropertyNamePropertyToken

两个示例似乎都产生了相同的行为,但警告错误仅使用流式绑定出现。

4

1 回答 1

1

MvxBindingDescription 对重构并没有真正的帮助——它在文本或流式绑定之上以及在绑定引擎的反射级别之下运行。

如果您想要Expression基于绑定进行重构,那么您必须使用 Fluent 绑定并支付额外代码行的惩罚(如果您认为这是一种惩罚)

于 2013-08-16T22:49:08.957 回答