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