2013-08-16 57 views
0

我创建了一个MvxTableViewCell子类,我打算在应用程序的许多位置重用,所以我想将绑定任务委托给单元的创建者。MvvmCross:从外部绑定MvxTableViewCell

到目前为止,我基于N+1 tutorial的一些例子得到了这个工作,主要是this code from 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>,但我无法找到有关它的示例或文档。

任何人都可以指向正确的方向吗?

谢谢。

编辑: 控制线是不是我最关心的,但具有限定结合之前实例化每一个单元,我很高兴能有这样的事情:

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); 

有没有什么可以做到这样移动?

UPDATE: 只注意到第二结合例子填满我的日志控制台与此错误:

MvxBind:Warning: 0.40 Unable to bind: source property source not found 
Cirrious.MvvmCross.Binding.Parse.PropertyPath.PropertyTokens.MvxPropertyNamePropertyToken on null-object

两个样本似乎产生相同的行为,但警告错误只能用流利的结合出现。

回答

1

MvxBindingDescription不会真的帮助重构 - 它只是在文本或流利绑定之上运行,并且低于绑定引擎的反射级别。

如果你想Expression基于对重构结合,那么你必须用流利的结合,并支付额外的代码行的罚款(如果你认为这是一个点球)

+0

感谢您的答复斯图尔特,请参阅我的编辑更多细节。 – redent84