См. обновление ниже для 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
использует определенные типы (например, интерфейс) в качестве 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; }
}
}