У меня проблемы с использованием триггера данных в моем стиле.
Я хочу включить свойство HasImage
моего SelectedLocationInPage
. В качестве простого теста, который я могу прочитать свойство, это работает:
<UserControl>
<DockPanel VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<Grid HorizontalAlignment="Stretch">
<ContentControl Content="{Binding ExamManager}">
<ContentControl.Resources>
<DataTemplate DataType="{x:Type vm:LocationViewModel}">
<Button Style="{StaticResource imageLocationButton}">
<ContentControl Content="{Binding}"/>
</Button>
</DataTemplate>
</ContentControl.Resources>
</ContentControl>
<DockPanel Grid.Column="1">
<Border BorderBrush="Black" BorderThickness="1" Margin="20">
<ContentControl Content="{Binding SelectedLocationInPage}">
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="{Binding HasImage}" FontSize="100"/>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</ContentControl.Style>
</ContentControl>
</Border>
</DockPanel>
</Grid>
</DockPanel>
</UserControl>
Верхний элемент управления содержимым отображает сетку ячеек (экзамен), и когда вы выбираете ячейку, эта ячейка должна отображаться в нижнем контроль содержания. Как написано выше, при выборе ячейки с изображением или без изображения (HasImage == true/false
) правильно отображается «Истина» или «Ложь» в нижнем элементе управления содержимым.
Итак, я делаю следующий шаг и пытаюсь визуализировать разные шаблоны содержимого в зависимости от значения HasImage
, и я не могу заставить его работать. Когда я использую приведенный ниже код, в представлении просто отображается строковое представление по умолчанию (т. Е. Полностью определенный тип SelectedLocationInPage
).
(Я также пробовал привязать к DataContext.HasImage
, но безрезультатно. Также , Я знаю, что технически мне не нужно обрабатывать истину и ложь - я мог / должен иметь одно значение по умолчанию и один триггер, но я хочу убедиться, что все, что я пытаюсь, находится на одном уровне, чтобы избежать путаницы, как и я выяснить это)
<ContentControl Content="{Binding SelectedLocationInPage}">
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<Style.Triggers>
<DataTrigger Binding="{Binding HasImage}" Value="True">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="HAS IMAGE" FontSize="100"/>
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding HasImage}" Value="False">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="NO IMAGE" FontSize="100"/>
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
Я не уверен, есть ли какой-либо другой код, который мог бы помочь (viewmodels et c), я считаю, что все, что вам нужно знать, это то, что HasImage
- это свойство типа bool из SelectedImageInPage
, и что в первом примере свойство HasImage
работает без проблем.