C# KeyedCollection和d:DataContext设计错误
请参阅下面的VS2013更新 当将类用作公开C# KeyedCollection和d:DataContext设计错误,c#,wpf,visual-studio-2013,datacontext,design-time,C#,Wpf,Visual Studio 2013,Datacontext,Design Time,请参阅下面的VS2013更新 当将类用作公开KeyedCollection的d:DesignInstance时,XAML设计器会发出以下警告: 提供的泛型参数的数量不等于 泛型类型定义 参数名称:实例化 可使用以下简单程序重现该问题: <Window x:Class="Test.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http
KeyedCollection
的d:DesignInstance
时,XAML设计器会发出以下警告:
提供的泛型参数的数量不等于
泛型类型定义
参数名称:实例化
可使用以下简单程序重现该问题:
<Window x:Class="Test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Test"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance local:MyClass}" />
namespace Test
{
public partial class MainWindow : Window
{
public MainWindow() { InitializeComponent(); }
}
public class MyClass
{
public KeyedCollection<string, object> SettingsModule { get; private set; }
}
}
如果我没有误解你的问题,试着这样做
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Width="800" Height="800"
Title="MainWindow"
>
<Window.DataContext>
**<local:MyClass />**
</Window.DataContext>
<Grid x:Name="LayoutRoot">
</Grid>
****
我希望这会有所帮助。我已经能够通过在设计实例类型前面加上“d:type”这样的前缀来解决这个问题: 这似乎是VS2013设计器中的一个错误。我认为d:Type属性应该是
d:DesignInstance
属性的默认属性。另外,奇怪的是,我只在KeyedCollection
类中看到了这个问题
此外,
d:DesignInstance
的用法有时使用不带前缀的“Type”。在本例中,如果省略了d:Type
或缺少前缀,则会生成我提到的设计时错误。我必须从DesignInstance类中删除默认构造函数,谢谢,但这并不能完全解决我的特定问题。我特别需要使用d:DataContext在XAML设计器中提供设计时数据形状。我以不同的方式设置了实际的DataContext。有关设计时数据的更多信息,请参见此处:VS2015中似乎也存在
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Width="800" Height="800"
Title="MainWindow"
>
<Window.DataContext>
**<local:MyClass />**
</Window.DataContext>
<Grid x:Name="LayoutRoot">
</Grid>
d:DataContext="{d:DesignInstance d:Type=local:MyClass}"