如何从文件名与 CollectionViewSource 中的项目匹配的本地文件夹插入图像

How to insert an image from a local folder where filename match item from a CollectionViewSource

我正在 WPF 中构建我的第一个应用程序,我正在尝试将图像从本地文件夹添加到列表视图。该文件夹包含文件名由 10 位数字组成的图像(例如 1234567890.jpg)。

问题是图像 (1234567890.jpg) 应该与数据库中员工 ID 为 1234567890 的员工相匹配。所以我有 2 个不同的来源。

我是编程新手,现在我已经 Google 花了 2 天时间,试图找到解决这个问题的方法,但没有任何运气。 我试过合并到 CompositeCollection 中。我试过用图像创建一个列表。我想我已经尝试了一切。

这是我目前的情况:

<Window.Resources>
        <DataTemplate x:Key="EmployeeTemplate">
            <Grid MaxWidth="500" Margin="3">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>

                <Image Name="employeeImage" Grid.Column="0" Width="50" 
                       Source=""/>

                <StackPanel Grid.Column="1">
                    <StackPanel Margin="3,0" Orientation="Horizontal">
                        <TextBlock Text="{Binding LastName}"/>
                        <TextBlock Text=", "/>
                        <TextBlock Text="{Binding FirstName}"/>
                    </StackPanel>
                    <TextBlock Name="EmployeeIDTextBlock" Margin="3,0" Text="{Binding EmployeeID}"/>
                    <TextBlock Margin="3,0" Text="{Binding Department.DepartmentName}"/>
                </StackPanel>
            </Grid>
        </DataTemplate>

        <CollectionViewSource x:Key="employeeViewSource" d:DesignSource="{d:DesignInstance {x:Type local:Employee}, CreateList=True}"/>

    </Window.Resources>



<Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition/>
                    </Grid.ColumnDefinitions>
                    <ListView x:Name="grid1" Grid.Column="0" 
                                ItemTemplate="{StaticResource EmployeeTemplate}"
                                ItemsSource="{Binding Source={StaticResource employeeViewSource}}"/>

                </Grid>

我想要的是将图片显示在列表中的每个员工面前。

如果我问错了这个问题或遗漏了什么,我深表歉意,但这也是我在这里的第一个问题。

希望能帮到你

如果我很清楚你需要什么,你可以使用一个转换器,使用 "EmployeeID" 会给你一个 ImageSource:

class Imageconverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value == null)
                return null;
            string imgDir = @"\Imgs\";
            string fileName = System.IO.Path.Combine(imgDir,String.Format("{0}.jpg", value.ToString()));


            if (!System.IO.File.Exists(fileName))
                return null;


            BitmapImage src = new BitmapImage(new Uri(fileName, UriKind.Absolute));

            return src;
        }

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

为转换器创建资源:

<local:Imageconverter x:key="ImgConverter/>

并使用它:

<Image Name="employeeImage" Grid.Column="0" Width="50" 
                       Source="{Binding EmployeeID, Converter={StaticResource ImgConverter}}"/>