带有 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,在未创建的对象上挂接事件是个坏主意。抱歉浪费您的时间:/谢谢。
我有一个很奇怪的问题。目前,我正在将带有 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,在未创建的对象上挂接事件是个坏主意。抱歉浪费您的时间:/谢谢。