Я хотел бы создать неявный DataTemplate, который работает с массивом или IEnumerable моего класса. Таким образом, у меня есть шаблон, который описывает, как отображать кучу элементов, а не только один. Я хочу сделать это, чтобы я мог, среди прочего, показать результаты в всплывающей подсказке. напримерDataTemplate для массива или IEnumerable
<TextBlock Text="{Binding Path=CustomerName}" ToolTip="{Binding Path=Invoices}">
В подсказке должно быть указано, что Счета-фактуры представляют собой набор элементов и используют соответствующий шаблон данных. Шаблон будет выглядеть примерно так:
<DataTemplate DataType="{x:Type Customer[]}">
<ListBox "ItemsSource={Binding}">
etc
Это не сработало, так что я попробовал пример с этого поста x:Type and arrays--how?, который включает в себя создание нестандартного модуля разметки. Это работает, если вы укажете ключ, но не для неявного шаблона
Итак, я попытался создать собственное собственное расширение разметки, наследующее от 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();
}
}
Разве вы не можете просто создать шаблон данных для одного объекта, а затем привязать список в 'ListBox'? – annonymously
Это не очень хорошо ... –
Это правда, но в некоторых случаях это предпочтительнее. В моем случае я представляю данные в DataGrid, поэтому вы не можете указать шаблон для каждого элемента, вам нужен шаблон для каждого столбца. В других случаях было бы просто иметь возможность сделать это. – MikeKulls