ios - MvvmCross:从外部绑定(bind)MvxTableViewCell

标签 ios uitableview xamarin.ios mvvmcross

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

相关文章:

swift - 如何修复 'black background after deletion of one row"

iphone - UINavigationController:如何取消后退按钮事件?

ios - 事件字节与驻留大小

ios - 使用参数执行存储在 NSMutableArray 中的 block

ios - Swift UITableViewCell IBOutlets 未显示在 StoryBoard 中

ios - 如何根据条件创建 UITableView 单元格?

c# - 如何确定我的程序集是否可以被 Mono、MonoTouch、MonoDroid 使用?

ios - Xamarin "The executable was signed with invalid entitlements"

c# - VS2015 在 iOS 应用程序启动后停止调试器

ios - searchBar 未在 navigationItem 中居中