【问题标题】:MvvmCross: MvxTableViewCell binding from outsideMvvmCross:从外部绑定 MvxTableViewCell
【发布时间】:2013-08-16 11:09:54
【问题描述】:

我已经创建了一个MvxTableViewCell 子类,我计划在我的应用程序的许多地方重用它,所以我想将绑定任务委托给单元格的创建者。

到目前为止,我是根据一些N+1 tutorial 示例来完成这项工作的,主要是来自N=17-Collect a Bull part 3 教程的this code

所以此时,创建一个单元格如下所示:

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&lt;MvxBindingDescription&gt;,但我找不到有关它的示例或文档。

谁能指出我正确的方向?

谢谢。

编辑: 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

两个示例似乎产生了相同的行为,但警告错误仅在使用流式绑定时出现。

【问题讨论】:

    标签: ios uitableview xamarin.ios mvvmcross


    【解决方案1】:

    MvxBindingDescription 对重构并没有真正的帮助 - 它在文本或流式绑定之上以及在绑定引擎的反射级别之下运行。

    如果你想要基于 Expression 的绑定进行重构,那么你必须使用 Fluent 绑定并支付额外代码行的惩罚(如果你认为这是一种惩罚)

    【讨论】:

    • 感谢您的回复 Stuart,请参阅我的编辑了解更多详情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 2017-07-18
    • 2013-10-17
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多