c# - 在 WPF ListView 中显示图像

标签 c# wpf entity-framework listview listviewitem

我想在我的 ListView 中显示一张图片,但我不知道该怎么做。 我的 Guest 类有方法 GetGuestImage() 它返回给我一个绝对路径。 当此文件存在时应加载,当不存在时应加载占位符图像。

我如何实现这一点?

<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>

最佳答案

您可以使用 CellTemplate 和值转换器来完成此操作:

<ListView x:Name="listview" xmlns:local="clr-namespace:WpfApplication1">
    <ListView.Resources>
        <local:ImageConverter x:Key="ImageConverter" />
    </ListView.Resources>
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Image">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <Image Source="{Binding Path=., Converter={StaticResource ImageConverter}}" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <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>

namespace WpfApplication1
{
    public class ImageConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            dynamic dataObject = value;
            if (dataObject != null)
            {
                string path = dataObject.GetGuestImage();
                if(System.IO.File.Exists(path))
                    return new Uri(dataObject.GetGuestImage(), UriKind.RelativeOrAbsolute);
            }

            return new Uri(@"c:\yourplaceholderimage.png", UriKind.RelativeOrAbsolute);
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

虽然您不能直接绑定(bind)到 GetGuestImage() 方法。另一个想法可能是通过数据对象类的 Uri 属性公开路径并绑定(bind)到这个。那么你不需要转换器:

<GridViewColumn Header="Image">
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <Image Source="{Binding GuestImage}" />
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

public class YourDataClass
{
    public Uri GuestImage
    {
        get { return new Uri(@"c:\picture.png", UriKind.RelativeOrAbsolute); }
    }

    //+ the other properties...
}

关于c# - 在 WPF ListView 中显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42022530/

相关文章:

c# - 将字符串数组发布到 .net-core mvc

c# - 将 Delphi DLL 与来自 C# 的动态数组一起使用

c# - 如何将列表框选定的项目分配给源属性

c# - 数据绑定(bind)到 WPF 中的文本框

entity-framework - 在linq查询MVC 2.0中将字符串解析为poco类枚举

c# - FirstOrDefault() 方法是处理这种情况的好方法吗

c# - 强制javascript文件在IE 11中刷新

c# - 你如何写入 NUnit gui runner 的 Log 选项卡和 Console.Error 选项卡

wpf - 如何在 WPF 应用程序中应用不同的配色方案

visual-studio-2010 - Entity Framework - 无法从我的 EDMX 生成数据库,因为新实体不在数据库中?