我在UITextView上有一个非常标准的绑定设置
local:MvxBind="Text Quantity"
其中Quantity是int属性。
如果我输入123说,那将被分配并调用setter。当我删除该文本时,123 - > 12 - > 1 - >空字符串,为每个数字调用setter,但不为空字符串调用,因为发生以下异常:
MvxBind:Error: 48.84 SetValue failed with exception - FormatException: Input string was not in the correct format
有没有办法在绑定中自动将空字符串值转换为0?我需要一个值转换器吗?这实际上是一个错误吗?
提前致谢。
答案 0 :(得分:1)
最近在https://github.com/slodge/MvvmCross/issues/350中讨论了此区域,并在https://github.com/slodge/MvvmCross/issues/373中添加了nullable
个内容 - 欢迎有人在那里提供意见(和/或代码)。
当前的“现状”是MvvmCross将解析并表示有效的十进制数。但是,如果数字无效 - 例如,如果它是string.Empty或一组非数字字符 - 则MvvmCross不会将这些解释为零(应该“”为零?应该“asdf”为零?应该“ 123.456.7“是零?应该”1234是否“为零?也许所有这些都应该是NaN
?”。
如果人们需要特定的行为,那么他们很容易实现这种行为 - 例如使用自定义控件(子类UITextField),使用值转换器,使用自定义绑定(或覆盖默认绑定),使用viewModel上的字符串属性等。
我个人认为,这个话题确实属于Validation
标题。通常,MvvmCross目前不为Validation
提供许多钩子。它被提出了很长时间 - https://github.com/slodge/MvvmCross/issues/133 - 但没有人表现出很大的兴趣。 https://github.com/slodge/MvvmCross-Tutorials/tree/master/ApiExamples中的WithErrors演示中有一些简单的验证示例。在我编写的应用程序中,我们通常编写和子类UI控件,以帮助减少验证的需要 - 一般来说,我们试图避免尽可能多的文本输入(用户不需要)喜欢似乎喜欢在手机上使用键盘)