便携式INotifyDataErrorInfo,ValidationContext和Validator.TryValidateObject

时间:2014-07-13 13:00:29

标签: c# ios xamarin.ios xamarin portable-class-library

我尝试使用INotifyDataErrorInfo,ValidationContext和Validator.TryValidateObject,并且我不断获得堆栈溢出异常。 Visual Studio锁定,所有要做的就是通过任务管理器将其终止。我甚至无法进入房产。我已经尝试将类外部的代码移动到一个单独的方法中并且它做同样的事情,我甚至无法进入该方法以查看导致锁定的行。

这将显示在“输出”窗口中:

mono-rt: Stack overflow in unmanaged: IP: 0x1516f9, fault addr: 0xbff88fdc
Unhandled Exception:

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.

我的设置是: Win8项目和Xamarin.iOS Universal项目都引用了一个包含一堆ViewModel的Profile7 PCL。

我有一个简单的视图模型,它实现了INotifyDataErrorInfo(用于Win8绑定)。没问题。 iOS项目将简单地使用" HasErrors"财产等...

这是一个完整的类,它会在iOS 7.1模拟器中运行时导致堆栈溢出:

public class SimpleValidation : INotifyDataErrorInfo
{
    #region INotifyDataErrorInfo Members

    public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;

    public System.Collections.IEnumerable GetErrors(string propertyName)
    {
        IList<string> list = new List<string>();

        return list;
    }

    public bool HasErrors
    {
        get
        {
            ICollection<ValidationResult> validationResults = new  List<ValidationResult>();

            var vx = new ValidationContext(this);

            if (Validator.TryValidateObject(this, vx, validationResults))
            {
                return false;
            }

            return true;
        }
    }

    #endregion

    [Required(ErrorMessage="Dude, where's my car?!?")]
    public string SimpleProperty { get; set; }
}

这些类型不兼容吗?我以为System.ComponentModel.DataAnnotations已被移植了?

任何帮助都非常感激。

干杯, 克里希纳

0 个答案:

没有答案