Search code examples
c#wpfxamlstylesdatatemplate

When the Image is null, set another default image?


Can you see this tag:

<Image Source="{Binding Image}" Stretch="UniformToFill"/>

But below? What I'm trying to do is, when the Image is null, set another default image. Is this possible?

<!-- Grid-appropriate 250 pixel square item template as seen in the GroupedItemsPage and ItemsPage -->
<DataTemplate x:Key="Standard250x250ItemTemplate">
    <Grid HorizontalAlignment="Left" Width="320" Height="240">
        <Border Background="{StaticResource ListViewItemPlaceholderRectBrush}">
            <Image Source="{Binding Image}" Stretch="UniformToFill"/>
        </Border>
        <StackPanel VerticalAlignment="Bottom" Background="{StaticResource ListViewItemOverlayBackgroundBrush}">
            <TextBlock Text="{Binding ShortTitle}" Foreground="{StaticResource ListViewItemOverlayTextBrush}" Style="{StaticResource TitleTextStyle}" Height="48" Margin="15,0,15,0"/>
        </StackPanel>
    </Grid>
</DataTemplate>

Solution

  • Add a Style with a DataTrigger. e.g. something like

    <Image Stretch="UniformToFill">
         <Image.Style>
             <Style TargetType="Image">
                 <Setter Property="Source" Value="{Binding Image}"/>
                 <Style.Triggers>
                     <DataTrigger Binding="{Binding Image}" Value="{x:Null}">
                         <Setter Property="Source" Value="Images/Default.png"/>
                     </DataTrigger>
                 </Style.Triggers>
             </Style>
        </Image.Style>
    </Image>
    

    Watch out for precedence of local values.