Xamarin.ios 使用MVVMCross绑定到错误消息

Xamarin.ios 使用MVVMCross绑定到错误消息,xamarin.ios,mvvmcross,Xamarin.ios,Mvvmcross,我不熟悉MVVMCross(一般来说是移动的),我希望实现对错误消息的绑定(如FluentValidationResults或IDataErrorInfo) 最好是,我想要一本像字典这样的错误,我可以直接绑定到: bind(label).To(vm=>vm.Errors[“Name”]) 我尝试了ObservalEditionary(),但当ViewModel添加错误时,我没有收到通知 正如预期的那样,将访问权包装为视图模型中的属性是可行的,但可能会变得很麻烦: publicstringname

我不熟悉MVVMCross(一般来说是移动的),我希望实现对错误消息的绑定(如FluentValidationResults或IDataErrorInfo)

最好是,我想要一本像字典这样的错误,我可以直接绑定到:
bind(label).To(vm=>vm.Errors[“Name”])

我尝试了ObservalEditionary(),但当ViewModel添加错误时,我没有收到通知

正如预期的那样,将访问权包装为视图模型中的属性是可行的,但可能会变得很麻烦:
publicstringnamererror{get{返回错误。ContainsKey(“Name”)?错误[“Name”]:null;}}

我还考虑过创建自定义绑定,但不确定如何访问ViewModel并传递所需的字段名。似乎我可以传递错误或属性名称

最后,由于无效转换(例如,int的22ab)没有被下推到视图模型中,有没有办法获得这些错误?我应该在数据被推回视图模型之前进行验证吗?比如文本字段应该在iOS上删除或更改字符?如果需要,我可以包装一个自定义控件

其他人在Xamarin/MVVMCross中使用了哪些技术来提供验证反馈


提前感谢。

MvvmCross目前没有实现IDataErrorInfo级别的数据绑定

这主要是因为还没有人提出要求——但我想这可能会随着这个问题而改变。如果您确实有特定的需求,那么项目将有兴趣听取他们的意见-怀疑最好的地方是项目的github问题

对于您的具体问题


绑定到实现
INotifyCollectionChanged
INotifyPropertyChanged
observatededictionary
的方法应该可以工作

但是,查看链接中的代码,我认为字典没有正确实现
INotifyPropertyChanged
——除了
INotifyCollectionChanged
事件之外,它还应该在
Count
项[]上发出属性更改通知
-如果没有这些,绑定到整个集合将起作用,但不会绑定到单个项目和计数。有关ObservableCollection的示例源,请参见

第二次查看链接中的代码时,字典似乎正确地实现了
INotifyPropertyChanged
——它正在引发属性更改通知
Item[]
——这是绑定单个项所需的字符串。是否启用了调试跟踪?跟踪是否为您提供了失败原因的线索

我今天提交了一些修复程序,并在这个示例中对它们进行了测试。我希望这个示例可以在iOS上运行(iOS测试应用程序正在开发中),而且它还可以扩展,以实现Jeremy出色的FluentValidation(尽管我还没有在PCL表单中使用它)


感谢您指出此错误-修复的二进制文件将在接下来的一两天内更新


关于int字符串问题,绑定层目前“尽力”(TM)将UI类型转换为VM类型。但是,当前没有在失败时触发的事件,因此无法从绑定中触发ViewModel中的任何验证规则


相反,如果允许自由文本输入,我认为您需要将ViewModel类型实现为
string
,然后在ViewModel属性更改时触发验证规则。由于MvvmCross在验证发生时不公开任何绑定级别挂钩,因此可能需要在绑定发生时进行调整(例如,在第一响应者辞职时)而不是进行持续的验证-但这应该是相当直接的使用自定义绑定。

仍在研究此问题-稍后将尝试设置测试工具和应用程序。。。现在正忙于工作…进一步更新-认为这可能是修复的一部分…-仍在调查并准备单元测试。很抱歉,花了这么长时间才恢复,VS2012到模拟器停止工作,我必须创建一个新项目,添加所有文件并重新启动。不知道为什么?在调试您的源代码时,我确实更改为PropertyNameForChangedEvent,并且它按预期工作。感谢您的快速回复。继int字符串之后,我计划在shouldChangeCharactersRange和/或ShouldEndEditing中执行基本数据类型检查。然后在ViewModel中进行其余的验证。也许可以在视图模型上尝试使用字符串,但是我更喜欢强类型,这是可行的。好的-谢谢-关于这个问题,请重复。如果你做了什么好事——特别是使用Jeremy的fluent库——那么请写博客或github——那就太好了!
  <TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Enter email:"
      />
  <EditText
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textSize="30dp"
    local:MvxBind="Text Email"
    />
  <TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="#ff0000"
    local:MvxBind="Text Errors['Email']"
      />