KeyedCollection和d:DataContext设计错误
请参阅下面的VS2013更新。
当使用类作为暴露KeyedCollection
的d:DesignInstance
,XAML设计器会抱怨以下警告:
提供的generics参数的数量不等于generics类型定义的arity。
参数名称:instantiation
可以使用以下简单程序重现该问题:
namespace Test { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } } public class MyClass { public KeyedCollection SettingsModule { get; private set; } } }
我无法为暴露KeyedCollection
任何类提供设计时形状。
有什么想法在这里发生了什么?
更新:从VS2013开始,设计人员处理KeyedCollection
的行为已经改变(尽管仍未完全发挥作用)。
上面的示例不再生成错误。 但是,如果KeyedCollection
使用某些类型(例如接口)作为TItem
,则会生成以下错误:
你调用的对象是空的。
请考虑以下示例:
namespace Test { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } } public class MyClass { public KeyedCollection MyCollection { get; private set; } } public interface IInterface { string Name { get; set; } } }
我已经能够通过在设计实例类型前面添加“d:Type”来解决这个问题:
d:DataContext="{d:DesignInstance d:Type=local:MyClass}"
这似乎是VS2013设计师的一个错误。 我相信d:Type属性应该是d:DesignInstance
属性的默认属性。 另外,奇怪的是我只看到了KeyedCollection
类的这个问题。
此外, d:DesignInstance
用法的MSDN示例有时使用没有前缀的“Type”。 在此示例中,如果省略d:Type
或缺少前缀,则会像我提到的那样生成设计时错误。
如果我没有误解你的问题就试试吧
** **
我希望这将有所帮助。
我不得不从我的DesignInstance-Class中删除Default Constructor