使用没有特殊 ValueConverter 的操作将代码绑定到 属性

Binding in code to property with operation without special ValueConverter

在 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' 或 'x => x.SomeCollection[0].Property' (System.ArgumentException)

我知道我可以编写自己的 ValueConverter,但我很感兴趣是否有超越它的方法,因为显然有一种方法可以用 axml 编写它。

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)");