Search code examples
c#wpfentity-frameworklistviewlistviewitem

Display Image in WPF Listview


I want to show an image in my listview but i don't know how i should do this. My Guest class has the method GetGuestImage() it returns me a absolute path. When this file exists is should be loaded and when not a placeholder-image should be loaded.

How can i realize this?

<ListView x:Name="listview">
                    <ListView.View>
                        <GridView>
                            <GridViewColumn DisplayMemberBinding="{Binding GetGuestImage()}" Header="Image" />
                            <GridViewColumn DisplayMemberBinding="{Binding Vorname}" Header="Vorname" />
                            <GridViewColumn DisplayMemberBinding="{Binding Nachname}" Header="Nachname" />
                            <GridViewColumn DisplayMemberBinding="{Binding Postleitzahl}" Header="PLZ" />
                            <GridViewColumn DisplayMemberBinding="{Binding Ort}" Header="Ort" />
                            <GridViewColumn DisplayMemberBinding="{Binding Land}" Header="Land" />
                        </GridView>
                    </ListView.View>
                </ListView>

Solution

  • Use a Converter for that.

    public class NullGuestImageToPlaceholderConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value == null || !File.Exists(value as string))
                return placeholderImage;
    
            return GetImage(value);
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
    

    XAML:

    <ListView x:Name="listview">
        <ListView.View>
            <GridView>
                <GridViewColumn DisplayMemberBinding="{Binding GuestImage, Converter={StaticResource nullGuestImageConverter}}" Header="Image" />
                <!-- your other columns -->
            </GridView>
        </ListView.View>
    </ListView>
    

    I don't have the GetGuestImage implementation or your full XAML, so that's the most I can do for now.

    nullGuestImageConverter should be the x:Key of the converter, defined in your XAML's resources (like <UserControl.Resources>), and placeholderImage should be the implementation of how you retrieve said placeholder image (which I guess appears in GetGuestImage()).

    In fact, I guess you could simply replace the content of the Convert method by your GetGuestImage one, but I can't know for sure.