我在Windows Phone设计器中找到了一个描述NullReferenceException的主题,但是我认为这是一个有些不同的问题,因为它发生在所有平台上并且与MvvmCross插件无关 .
-
Designer(VS2012,Store / WP8 / WPF应用程序)适用于早期版本的MvvmCross . 我试图编译一个与3.0.6 NuGet包相对应的版本,我可以看到所有平台都加载了设计时模型 .
-
最近的MvvmCross版本导致所有设计器在所有平台上引发NULL引用异常(“对象引用未设置为对象的实例”) .
-
尝试调试VS实例没有帮助:调用堆栈没有多说,并且那里没有MvvmCross代码 .
-
该错误与实际视图/视图模型无关:我可以从视图中删除所有控件,并且引发错误 . 永远不会到达视图模型构造函数代码 .
因此看起来有一些MvvmCross代码(不是来自MvxView)在设计时未能成功执行 . 我想知道这是否是一个已知的问题和/或是否有一个解决方法来让设计师工作 .
UPDATE . 我创建了一个GitHub问题,其中包含重现问题的步骤:https://github.com/slodge/MvvmCross/issues/347
1 回答
这个问题转移到了GitHub,那里有很多讨论和一些样本 - https://github.com/slodge/MvvmCross/issues/347
从这些样本中,我相信我们总结了Nuget版本3.0.8.1:
支持基于Blend生成的XML数据文件的时间数据
支持基于简单C#类的设计时数据
不支持设计时数据,其中数据使用MvvmCross
MvxViewModel
作为基类开发人员应该做第三件事(设计时数据不是真正的数据?)并不是很明显,但鉴于整体MvvmCross宣言的目的是为了让开发人员能够做出选择,那么未来的MvvmCross将会让这在将来会更容易 .
与此同时,如果有人想在设计时初始化对象,那么有几个辅助类可以启用它 .
例如,可以使用
MvxColorDesignTimeHelper
在设计时环境中使用颜色插件(以及MvvmCross IoC的一小部分) - 请参阅:https://github.com/slodge/MvvmCross/issues/323(链接到MvvmCross throws NullReferenceException in Windows Phone Designer)
https://github.com/slodge/MvvmCross/blob/TibetBinding/Plugins/Cirrious/Color/Cirrious.MvvmCross.Plugins.Color.WindowsPhone/MvxColorDesignTimeHelper.cs
https://github.com/slodge/MvvmCross/blob/TibetBinding/CrossCore/Cirrious.CrossCore.WindowsPhone/Platform/MvxDesignTimeHelper.cs