我已经创建了一个MvxTableViewCell
子类,我打算在我的应用程序的许多点重用它,所以我想将绑定任务委托给单元格的创建者。
到目前为止,我的工作基于一些N+1 tutorial示例,主要是来自this code教程的N=17-Collect a Bull part 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
完成,因为第一个示例中使用的绑定文本被解析为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:Warning: 0.40 Unable to bind: source property source not found Cirrious.MvvmCross.Binding.Parse.PropertyPath.PropertyTokens.MvxPropertyNamePropertyToken on null-object
两个样本似乎都产生相同的行为,但警告错误仅使用流畅的绑定显示。
答案 0 :(得分:1)
MvxBindingDescription对重构没有任何帮助 - 它只在文本或流畅的绑定之上运行,并且恰好在绑定引擎的反射级别之下。
如果您希望基于Expression
的绑定进行重构,那么您必须使用Fluent绑定并支付额外代码行的代价(如果您认为是惩罚)