我阅读了以下有关 VS2013 中可用的新 xaml 编辑功能的博客文章:
数据绑定 Intellisense 是我多年来一直想要的东西,所以我试了一下——但不幸的是,它在错误列表中返回了一个错误(尽管它仍然可以正常构建)。
这是我添加到我的 UserControl 声明/标签中的内容:
d:DataContext="{d:DesignInstance Type=lTemplates:TemplateEditorCustomVM}"
这是列表中的错误:
错误 95 访问被拒绝:
System.Collections.ObjectModel.ObservableCollection'1[_.di1.TemplateEditorCustomVM+TemplateCriteriaVM]'.
我不完全确定它试图做什么,这两个类都被声明为公共(主视图模型和嵌套类)。
有人有什么想法吗?
如果不是,这不是世界末日,因为 Resource Key Intellisense 似乎可以工作,这仍然是一个巨大的好处。
编辑
好的 - 我将嵌套类移到公共命名空间中,VS 给了我一个更详细的错误:
错误 64
Attempt by method '_.di1.Templates.TemplateEditorCustomVM..ctor()' to access method 'System.ComponentModel.BindingList'1<System.__Canon>..ctor()'
失败。
我有点困惑,我必须说:
首先,为什么智能感知需要实例化 VM 类,它只需要关心哪些属性可用以及它们是什么类型——所有这些都可以通过反射来检索。
其次,我不明白为什么它在应用程序启动时运行良好时会出错。
我可能不得不做一个老把戏,让 Visual Studio 自己调试自己运行设计器,看看它试图做什么......
进一步编辑
对,我将 BindingList 属性更改为直接的 List 属性(因为 BindingList 来自 WinForms 方面,所以我认为这可能值得更改以查看它的作用)。但我遇到了类似的错误:
错误 64
Attempt by method '_.di3.Templates.TemplateEditorCustomVM..ctor()' to access method 'System.Collections.Generic.List'1<System.__Canon>..ctor()' failed.
我在 System.__Canon 上做了一个快速的谷歌搜索,它只是一个优化细节:
https://stackoverflow.com/a/16856205/182568
虽然还没有更进一步了解发生了什么,嗯,我会继续深入挖掘。
编辑 - 现在有一个回购
是的,出于好奇,我开始注释掉大量的虚拟机,试图弄清这个问题——我现在有一个虚拟机类,它似乎重现了这个问题:
public class Nested
{
public class TestCheck
{
public int One { get; set; }
public int Two { get; set; }
}
}
public class SanityTestVM
{
public List<Nested.TestCheck> Test { get; set; }
}
给出:
错误 14 方法尝试
'_.di14.Templates.SanityTestVM..ctor()' to access method 'System.Collections.Generic.List'1<System.__Canon>..ctor()' failed.
看来问题是有一个列表,它的类型有一个嵌套类 - 如果它是一个普通类(非嵌套),一切都很好。
我想我需要为此提交一个连接案例——在我这样做之前,是否有人能够确认这一点,我在 Windows 8.1 机器上有 4 个版本的 VS,我只想排除开发环境。