【发布时间】:2013-11-12 18:57:42
【问题描述】:
我阅读了以下关于 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
虽然还没有进一步弄清楚发生了什么,但我会继续深入挖掘。
编辑 - 现在有一个回购
好吧,出于好奇,我开始注释掉大量 VM 以试图弄清楚这一点 - 现在我有一个 VM 类,它似乎重现了这个问题:
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; }
}
给予:
方法
'_.di14.Templates.SanityTestVM..ctor()' to access method 'System.Collections.Generic.List'1<System.__Canon>..ctor()' failed.尝试的错误14
看来问题在于 List 的类型有一个嵌套类 - 如果它是一个普通类(非嵌套),一切都很好。
我想我需要为此提交一个连接案例 - 在我这样做之前是否有人能够确认这一点,我在 Windows 8.1 机器上有 4 个版本的 VS,我只想排除开发环境.
【问题讨论】:
-
TemplateEditorCustomVM是什么样的? (如果它可以简化为复制错误的几个简单属性)。 -
不幸的是它相当庞大。我会看看是否可以将其减少到导致错误的属性。
-
你可能会自己弄明白 =D 我试图重现这个问题,但似乎没有解决它。
-
仍然无法复制问题,不知道这是否相关? stackoverflow.com/questions/13632209/…
-
这是一个安全问题,我刚刚尝试使用管理员权限运行 VS,但不幸的是没有区别。
标签: c# wpf visual-studio xaml intellisense