具有MvvmCross和PCL的活化剂

时间:2015-05-06 19:22:35

标签: xamarin windows-store-apps mvvmcross

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

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

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

代码在每个Model中执行,并在基类构造函数中实现:

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();
        };
    }
}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

感谢所有答案。我现在感觉有点尴尬,因为我认为问题出来了,这完全是我的错:)。

@Anders:你是对的,我在立即窗口中拼错了激活器,这就是为什么错误出现在第一位 - 愚蠢

第二个问题是生成的Object的ctor。

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

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