我创建了一个 MvxTableViewCell
我计划在应用程序的许多点重用该子类,因此我想将绑定(bind)任务委托(delegate)给单元格的创建者。
到目前为止,我的工作是基于一些 N+1 tutorial例子,主要是this code来自 N=17-Collect a Bull part 3教程。
此时,创建一个单元格如下所示:
return new SubtitleCell("TitleText Name; SubtitleText Subject.Descripcion"))
但我不太喜欢在字符串中定义的绑定(bind),因为我通常会进行大量重构,这可能会在不久的将来造成麻烦,所以我决定像这样声明绑定(bind),就像这样的普通可绑定(bind) View :
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;
这现在像以前一样工作,现在它是重构安全的,但它是我以前的代码行数的六倍,并且必须在已经创建单元格实例时定义绑定(bind)。
我认为可以使用 MvxBindingDescription
来完成因为第一个示例中使用的绑定(bind)文本被解析为 IEnumerable<MvxBindingDescription>
,但我无法找到有关它的示例或文档。
谁能给我指出正确的方向吗?
谢谢。
编辑: LoC 不是我最关心的问题,但必须在定义绑定(bind)之前实例化每个单元格,我很高兴有这样的东西:
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);
有什么可以这样移动吗?
更新: 刚刚注意到第二个绑定(bind)示例在我的日志控制台中填充了以下错误:
MvxBind:Warning: 0.40 Unable to bind: source property source not found Cirrious.MvvmCross.Binding.Parse.PropertyPath.PropertyTokens.MvxPropertyNamePropertyToken on null-object
两个示例似乎都会产生相同的行为,但警告错误仅在使用流畅绑定(bind)时出现。
最佳答案
MvxBindingDescription 对重构并没有真正的帮助 - 它在文本或流畅绑定(bind)之上以及绑定(bind)引擎的反射级别之下运行。
如果您想要基于 Expression
的绑定(bind)进行重构,那么您必须使用 Fluent 绑定(bind)并付出额外代码行的代价(如果您认为这是一种惩罚)
关于ios - MvvmCross:从外部绑定(bind)MvxTableViewCell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18271956/