2

我在 UITextView 上的 android 中设置了一个非常标准的绑定

local:MvxBind="Text Quantity"

其中 Quantity 是一个 int 属性。

如果我输入 123 ,那么它会被分配并调用 setter。当我删除该文本 123 -> 12 -> 1 -> 空字符串时,会为每个数字调用 setter,但不会为空字符串调用 setter,事实上会发生以下异常:

MvxBind:Error: 48.84 SetValue failed with exception - FormatException: Input string was not in the correct format

有没有办法在绑定中自动将空字符串值转换为 0?我需要一个价值转换器吗?这实际上是一个错误吗?

提前致谢。

4

1 回答 1

1

最近在https://github.com/slodge/MvvmCross/issues/350讨论了这个领域,并在https://github.com/slodge/MvvmCross/issues/373nullable中添加了一些内容- 欢迎大家发表意见(和/或代码)那里。

当前的“现状”是 MvvmCross 将解析并表示有效的十进制数。但是,如果数字无效 - 例如,如果它是 string.Empty 或一组非数字字符 - 那么 MvvmCross 不会将这些解释为零(“”应该为零吗?“asdf”应该为零吗?应该“ 123.456.7" 是否为零?"1234asd" 是否应该为零?也许所有这些实际上都应该是NaN?)。

如果人们需要特定的行为,那么他们很容易实现这种行为 - 例如使用自定义控件(子类 UITextField),使用值转换器,使用自定义绑定(或覆盖默认绑定),使用 viewModel 上的字符串属性,等等

我个人的看法是,这个话题确实在Validation标题之下。总的来说,目前 MvvmCross 并没有提供很多钩子Validation。它已经提出了很长时间 - https://github.com/slodge/MvvmCross/issues/133 - 但没有人表现出很大的兴趣。在https://github.com/slodge/MvvmCross-Tutorials/tree/master/ApiExamples的 WithErrors 演示中有一些简单的验证示例。在我编写的应用程序中,我们通常会编写 UI 控件并对其进行子类化,以帮助减少验证需求——通常我们会尽量避免需要尽可能多的文本输入(用户不会就像似乎喜欢在手机上使用键盘)

于 2013-08-07T18:23:47.300 回答