Мой ListView
имеет пользовательский View
:
public class TileView : ViewBase
{
public DataTemplate ItemTemplate { get; set; }
public ImageSource IconSource { get; set; } = new BitmapImage(new Uri("../Resources/umf.png", UriKind.Relative));
protected override object DefaultStyleKey => new ComponentResourceKey(GetType(), "TileView");
protected override object ItemContainerDefaultStyleKey => new ComponentResourceKey(GetType(), "TileViewItem");
}
, которые используют следующие DataTemplate
:
<local:TileView>
<local:TileView.ItemTemplate>
<DataTemplate>
<StackPanel>
<Image
Source="{Binding IconSource, RelativeSource={RelativeSource Mode=TemplatedParent}}"
/>
</StackPanel>
</DataTemplate>
</local:TileView.ItemTemplate>
</local:TileView>
Я хочу показать одно изображение для всех элементов, поэтому я создал свойство в View
class:
public ImageSource IconSource { get; set; } =
new BitmapImage(new Uri("../Resources/umf.png", UriKind.Relative));
и попробуйте ссылаться на него из шаблона:
<Image Source="{Binding IconSource,
RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
но получите ошибку
Ошибка System.Windows.Data: 40: Ошибка пути BindingExpression:
Свойство 'IconSource' не найдено в 'объекте' '' ContentPresenter '
(Name = '')». BindingExpression: Path = IconSource;
DataItem = 'ContentPresenter' (Name = ''); Целевым элементом является «Изображение»
(Имя = ''); Целевое свойство 'Source' (тип 'ImageSource')
Когда я пытаюсь написать
Source="{Binding IconSource,
RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type local:TileView}}}"
Я получаю
System.Windows.Data Ошибка: 4: не удается найти источник для связывания с
ссылка 'RelativeSource FindAncestor,
AncestorType = 'ClientWPF.Controls.TileView', AncestorLevel = '1' '.
BindingExpression: Path = IconSource; DataItem = NULL; целевой элемент
'Image' (Name = ''); Свойство target - «Источник» (тип «ImageSource»)
Конечно, я могу встроить изображение в модель данных, но мне не нравится этот путь по понятным причинам.
Итак, как я могу сослаться на ItemSource
свойство View
из моего шаблона? Спасибо.