在axml中,我可以像这样绑定
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'或&& 39; x => x.SomeCollection [0] .Property' (System.ArgumentException)
我知道我可以编写自己的ValueConverter,但我很感兴趣是否有超越它的方法,因为显然有一种方法可以在axml中编写它。
答案 0 :(得分:3)
MvvmCross在流利语法中不包含To(vm => vm.Status == 0)
之类的表达式。部分原因是它们难以编码......部分原因是它们的编码通常需要运行时编译(iOS不允许)
解决此问题的唯一方法是在iOS中使用string
格式 - 例如比如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)");