MvvmCross:从外部绑定MvxTableViewCell

时间:2013-08-16 11:09:54

标签: ios uitableview xamarin.ios mvvmcross

我已经创建了一个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

两个样本似乎都产生相同的行为,但警告错误仅使用流畅的绑定显示。

1 个答案:

答案 0 :(得分:1)

MvxBindingDescription对重构没有任何帮助 - 它只在文本或流畅的绑定之上运行,并且恰好在绑定引擎的反射级别之下。

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