2015-05-29 41 views
0

代码与操作属性绑定在axml我可以绑定像这样无特殊ValueConverter

local:MvxBind="Visibility Status==0, Converter=Visibility" 

,但是当我试图做到这一点的代码:

set.Bind(_imgStatus).For(c => c.Hidden).To(vm => vm.Status == 0).WithConversion("Visibility"); 

set.Bind(_imgStatus).For(c => c.Hidden).To(vm => vm.Status.Equals(0)).WithConversion("Visibility"); 

我收到错误 属性表达式必须是'x => x.SomeProperty.SomeOtherProperty'或'x => x.SomeCollection [0] .Property'(System.ArgumentException)

我知道我可以编写自己的ValueConverter,但我很感兴趣,如果有一种方法可以超越,因为显然有一种方法写在axml中。

回答

3

MvvmCross在流利语法中不包含像To(vm => vm.Status == 0)这样的表达式。这部分是因为它们很难编码......部分原因是它们的编码通常需要运行时编译(iOS不允许)(0128)。像https://github.com/MvvmCross/NPlus1DaysOfMvvmCross/blob/master/N-35-Tibet/BindMe.Touch/Views/FirstView.cs#L63

所以你的样品有可能成为类似:

set.Bind(_imgStatus).For(c => c.Hidden).To("Visibility(Status == 0)"); 

,甚至(在这种情况下):

set.Bind(_imgStatus).For(c => c.Hidden).To("Status != 0"); 

也有一些described流利的方法,让你传递整个绑定字符串 - 例如例如:

set.Bind(_imgStatus).FullyDescribed("Hidden Visibility(Status != 0)");