绑定到mvvmcross中的索引属性

时间:2013-12-25 23:45:01

标签: mvvmcross

我正在尝试使用此绑定:

var index = 0;
set.Bind(view).For(s => s.DataContext).To(vm => vm.NewsFeedItems[index]); //NOK :(

其中index是常量。

但这不起作用:它什么都不做,价值没有显示出来。并且跟踪中没有错误。 绑定此属性的正确语法是什么?

还有其他stackoverflow问题,看起来它应该有效。

我尝试使用常量索引进行相同的绑定,并且它可以工作!所以索引表达式有问题。

 set.Bind(view).For(s => s.DataContext).To(vm => vm.NewsFeedItems[0]); //OK !

编辑:找到了解决方法。

set.Bind(view).For(s => s.DataContext).To("NewsFeedItems["+index+"]"); //OK !!

1 个答案:

答案 0 :(得分:2)

这是MvvmCross中流畅表达式解析器的限制。

MvvmCross流利绑定目前只接受常量表达式。

因此支持这些变体:

 vm => vm.Name
 vm => vm.NewsFeedItems[0]
 vm => vm.Foo["Bar"]
 vm => vm.Child.GrandChild.Name
 vm => vm.Children[12].Name
 vm => vm.Lookup["Fred"].Neighbours[3].House.Name

但任何动态表达式 - 例如包含index本地变量的动态表达式都不支持

构建完整的表达式求值程序是可能的,但需要更复杂的代码和处理 - 例如请参阅https://stackoverflow.com/a/13083397/373321中的一些示例代码,这是我要求非MvvmCross项目的问题(实际上是Hadoop项目)。有建议进一步扩展MvvmCross流利绑定 - 例如包括变量评估和西藏类型表达式 - 但是没有人发送拉动请求(尚未!)