Есть ли способ получить DataContext
из DataTemplate
для использования в привязках в его ресурсах?
<DataTemplate x:Key="History">
<ItemsControl ItemsSource="{Binding History}">
<ItemsControl.Resources>
<app:BitmapProvider x:Key="Converter" ShowDetails="True"
Type="{Binding Model.Type}" />
</ItemsControl.Resources>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" IsItemsHost="True"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image Source="{Binding Data, Converter={StaticResource Converter}}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
Приведенный выше шаблон используется как CellTemplate
для ListBox
. Объект на этом уровне имеет два свойства: History
(содержащий список объектов «исторической информации») и Model
(содержащее множество других вещей, включая Type
). Я использую ItemsControl
для отображения исторических предметов рядом друг с другом; Я хочу отобразить изображение для каждого, и изображение получается из BitmapProvider
, который является IValueConverter
.
Конвертеру нужны два бита информации для получения результата: один - Data
отдельных исторических предметов, а другой - Type
всей коллекции. Дополнительным осложнением является то, что создание этого конкретного конвертера (или изменение заданного ему Type
) является дорогостоящим, поэтому я не хочу ставить его на уровне отдельного элемента истории или использовать MultiBinding
, и Я не могу поместить его вне шаблона, потому что тогда у него не будет доступа к Type
.
К сожалению, вышесказанное дает мне следующую ошибку:
System.Windows.Data Ошибка: 2: не удается найти управляющий FrameworkElement или FrameworkContentElement для целевого элемента. BindingExpression: Path = Model.Type; DataItem = NULL; целевым элементом является «BitmapProvider» (HashCode = 57142809); целевое свойство 'Type' (тип 'TypeDetails')
Я понимаю, что ресурс не может понять, как получить DataContext
элемента, в котором он содержится.
(Я искал, и большинство ответов, которые я мог найти, предлагали переместить его за пределы шаблона или использовать вместо него MultiBinding
- ни один из которых не будет работать в этом случае, насколько я могу судить, поскольку Я объяснил выше. Но я был бы рад, если бы я оказался неправ или получил бы другую альтернативу.)