KeyedCollection和d:DataContext设计错误

请参阅下面的VS2013更新。

当使用类作为暴露KeyedCollectiond: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