请参阅下面的 VS2013 更新。

当使用类作为 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 使用某些类型(例如接口(interface))作为 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; }
    }
}

最佳答案

我已经能够通过在设计实例类型前加上“d:Type”来解决这个问题,如下所示:

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

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

此外,d:DesignInstance 用法的 MSDN examples 有时使用没有前缀的“类型”。在此示例中,如果省略 d:Type 或缺少前缀,则会产生我提到的设计时错误。

关于c# - KeyedCollection 和 :DataContext Design Error,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15030381/

10-11 02:09