首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >KeyedCollection和d:DataContext设计错误

KeyedCollection和d:DataContext设计错误
EN

Stack Overflow用户
提问于 2013-02-22 18:00:06
回答 3查看 1.7K关注 0票数 3

有关VS2013,请参见下面的更新。

当使用类作为公开d:DesignInstanceKeyedCollection<TKey, TItem>时,XAML设计器会发出以下警告:

提供的泛型参数的数量并不等于泛型类型定义的正确性。 参数名称:实例化

这个问题可以用以下简单的程序再现:

代码语言:javascript
运行
复制
<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,则会生成以下错误:

对象引用未设置为对象的实例。

请考虑以下示例:

代码语言:javascript
运行
复制
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; }
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-10 23:55:28

通过将设计实例类型前缀为"d: type“,我已经能够解决这个问题:

代码语言:javascript
运行
复制
d:DataContext="{d:DesignInstance d:Type=local:MyClass}"

这似乎是VS2013设计器中的一个bug。我认为d:Type属性应该是d:DesignInstance属性的默认属性。而且,奇怪的是,我只在KeyedCollection类中看到了这个问题。

此外,MSDN examples of d:DesignInstance使用有时使用没有前缀的"Type“。在本例中,如果省略d:Type或缺少前缀,就会像我前面提到的那样生成设计时错误。

票数 11
EN

Stack Overflow用户

发布于 2013-02-22 19:06:49

如果我没有误解你的问题

代码语言:javascript
运行
复制
<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
EN

Stack Overflow用户

发布于 2015-09-05 20:03:21

我必须从我的DesignInstance类中删除默认的构造函数

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15030381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档