2013-02-22 63 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類刪除默認構造函數