假设我使用
绑定bs.Bind(y)
.For(v => v.Visibility)
.To("Failures['TaxPercent'].Length")
.WithConversion("Visibility")
.WithFallback(false);
其中Failures
是包含属性名称(例如TaxPercent
)的字典,当且仅当属性未通过验证时。
因此Failure['TaxPercent']
返回验证失败消息(例如缺少值)。
我希望Android中有一个可扩展的textview,只有在检测到错误时才可见。我使用上面的代码,它不起作用。当字典中不存在Failure['TaxPercent']
时,不会触发回退值。
如何使用viewmodel中的字典根据验证结果获取可扩展/可折叠的textview?我真的想使用字典,因为这样可以避免为每个属性创建IsErrorVisible。
奇怪的是,使用字典可用于检索错误消息,但不是为了可见性!换句话说,这很有效。
bs.Bind(y)
.For(v => v.Text)
.To("Failures['TaxPercent']");
另外,我无法连接绑定的任何原因,这意味着我可以这样做吗???
bs.Bind(y)
.For(v => v.Text)
.To("Failures['TaxPercent']")
.For(v => v.Visibility)
.To("Failures['TaxPercent'].Length")
.WithConversion("Visibility")
.WithFallback(false);
修改
日志中的错误消息是 MvxBind:错误:168.86绑定执行时出现问题绑定可见性失败['TaxPercent']。长度 - 问题ArgumentException:传入的值必须是枚举基础或枚举的基础类型,例如Int32。
答案 0 :(得分:1)
如果字典不包含“TaxPercent”条目,则表达式Failures['TaxPercent'].Length
将不会评估(将抛出异常),因此将使用UnsetValue
。
在UnsetValue
的情况下,不会调用ValueConverter,并且将使用Fallback。这与Wpf中的模式相同 - http://msdn.microsoft.com/en-us/library/system.windows.dependencyproperty.unsetvalue(v=vs.110).aspx
对于您的特定情况,看起来您可以:
Failures
作为其绑定源,并将'TaxPercent'
作为其参数.Length
- 只测试条目是否存在。对于这种特殊情况,我只想放弃.Length
对于“我无法连接的任何原因”,这将不起作为Bind
的返回类型是单个Fluent绑定条目 - 而不是Fluent绑定集。