Я хотел бы создать неявный DataTemplate, который работает с массивом или IEnumerable моего класса.Таким образом, у меня есть шаблон, который описывает, как визуализировать группу элементов вместо одного.Я хочу сделать это, чтобы я мог, среди прочего, показать результаты во всплывающей подсказке.например,
<TextBlock Text="{Binding Path=CustomerName}" ToolTip="{Binding Path=Invoices}">
Подсказка должна видеть, что Счета-фактуры - это набор элементов, и использовать соответствующий шаблон данных.Шаблон будет выглядеть примерно так:
<DataTemplate DataType="{x:Type Customer[]}">
<ListBox "ItemsSource={Binding}">
etc
Это не сработало, поэтому я попробовал пример из этого поста x: Тип и массивы - как? , который включает в себя создание пользовательскихрасширение разметки.Это работает, если вы указываете ключ, но не для неявного шаблона
Итак, я попытался создать собственное расширение разметки, наследуемое от TypeExtension, как показано ниже, но я получаю сообщение об ошибке «Ключ для словаря не можетвведите 'System.Windows.Controls.StackPanel'. Поддерживаются только String, TypeExtension и StaticExtension. "Это действительно странная ошибка, так как она принимает содержимое таблицы данных в качестве ключа ??Если я укажу ключ, то он будет работать нормально, но это в значительной степени противоречит цели.
[MarkupExtensionReturnType(typeof(Type)), TypeForwardedFrom("PresentationFramework, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35")]
public class ArrayTypeExtension
: TypeExtension
{
public ArrayTypeExtension() : base() { }
public ArrayTypeExtension(Type type) : base(type)
{
}
public ArrayTypeExtension(string value) : base(value)
{
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
Type val = base.ProvideValue(serviceProvider) as Type;
return val == null ? null : val.MakeArrayType();
}
}