Это невозможно, если расширение разметки (DesignInstance
) не предоставляет свойства для передачи аргументов типа, в чем я сомневаюсь.Поэтому вы можете захотеть создать подкласс в соответствии с предложением или написать собственное расширение разметки, которое создает общие экземпляры (на самом деле это то, что я делаю прямо сейчас ).
Редактировать: Это расширение должно сделать это:
public class GenericObjectFactoryExtension : MarkupExtension
{
public Type Type { get; set; }
public Type T { get; set; }
public override object ProvideValue(IServiceProvider serviceProvider)
{
var genericType = Type.MakeGenericType(T);
return Activator.CreateInstance(genericType);
}
}
Изначально у меня были некоторые проблемы с получением типа объекта из имени типа, но вы можете позволить синтаксическому анализатору XAML определить тип, который вам подходит:
DataContext="{me:GenericObjectFactory Type={x:Type Dialogs:CustomerSearchDlogViewModel`1},
T=Data:Customer}"
(Обратите внимание на `1
в конце, чтобы ссылаться на универсальный тип. Если вы уроните x:Type
, оборачивающий обратную черту, вызовет ошибку.)