如何从文件名与 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}}"/>
我正在 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}}"/>