2013-02-22 64 views
3

请参阅下面的VS2013更新。KeyedCollection和d:DataContext设计错误

当使用类作为d:DesignInstance暴露一个KeyedCollection<TKey, TItem>中,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; } 
    } 
} 

我无法提供设计时间形状,它公开KeyedCollection任何类。

任何想法发生了什么?


更新:由于VS2013在处理一个KeyedCollection设计师的行为发生了变化(虽然还没有完全工作)。

上述示例不再生成错误。然而,如果使用KeyedCollection某些类型(例如接口)作为TItem生成以下错误:

对象引用不设置为一个对象的一个​​实例。

请看下面的例子:

namespace Test 
{ 
    public partial class MainWindow : Window 
    { 
     public MainWindow() { InitializeComponent(); } 
    } 

    public class MyClass 
    { 
     public KeyedCollection<string, IInterface> MyCollection { get; private set; } 
    } 

    public interface IInterface 
    { 
     string Name { get; set; } 
    } 
} 

回答

11

我已经能够通过前缀来设计实例类型来解决这个问题“d:类型”为这样的:

d:DataContext="{d:DesignInstance d:Type=local:MyClass}" 

这似乎是在VS2013设计的错误。我相信d:Type属性应该是d:DesignInstance属性的默认属性。另外,奇怪的是我只看到KeyedCollection这个课题。

此外,MSDN examplesd:DesignInstance使用情况有时会使用“Type”而不带前缀。在这个例子中,如果省略了d:Type或缺少前缀,那么正如我提到的那样产生设计时间错误。

+0

似乎也存在于VS2015中 – Stefan 2015-11-24 09:43:17

0

如果我have'nt误解了你的问题,尝试像

<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> 

我希望这将有助于。

+0

谢谢,但这并不能解决我的特殊问题。我特别需要使用d:DataContext在XAML设计器中提供设计时数据形状。我以不同的方式设置实际的DataContext。 有关设计时间数据的更多信息,请点击此处: http://karlshifflett.wordpress.com/2009/10/28/ddesigninstance-ddesigndata-in-visual-studio-2010-beta2/ – Terrence 2013-02-24 00:58:16

0

我不得不从我的DesignInstance类删除默认构造函数