带有 MvvmCross 和 PCL 的激活器

Activator with MvvmCross and PCL

我有一个很奇怪的问题。目前,我正在将带有 Prism 的 Windows 通用应用程序(Win 8.1 + WinPhone 8.1)移植到带有 MvvmCross 的 CrossPlattform 解决方案。 首先,非常感谢 MvvmCross 所做的所有工作 - 太棒了。

我现在的问题是 System.Activator class。我在我的通用应用程序中使用 this approach 进行验证,并尝试移植它。现在一切都可以正常编译,但在运行时会抛出空引用异常。我发现它是空的 Acitivator。当我尝试在即时 windows 中访问它时,它说:

error CS0103: The name 'Activiator' does not exist in the current context

代码在每个模型中执行,并在基础 class 构造函数中实现:

protected ModelBase()
{
    foreach (var property in this.GetType().GetRuntimeProperties())
    {
        var type = typeof(Property<>).MakeGenericType(property.PropertyType);
        var prop = (IProperty)Activator.CreateInstance(type);
        this.Properties.Add(property.Name, prop);
        prop.ValueChanged += (s, e) =>
        {
            RaisePropertyChanged(property.Name);
            Validate();
        };
    }
}

有什么想法吗?

谢谢大家的回答。我现在有点尴尬,因为我想出了问题,这完全是我的错:)。

@Anders:你是对的,我在 Immediate windows 中拼错了 Activator,这就是错误首先出现的原因 - stupid.

第二个问题是生成对象的构造函数。

public Property()
{
    this.Errors.CollectionChanged += (s, e) => RaisePropertyChanged("IsValid");
    Errors = new ObservableCollection<string>();
}

你找到错误了吗? Jap,在未创建的对象上挂接事件是个坏主意。抱歉浪费您的时间:/谢谢。