使用PK从列表中获取图像,并在MVVM的ListBox中显示为另一个对象的一部分
本文关键字:ListBox 一部分 显示 MVVM 一个对象 并在 PK 列表 获取 图像 使用 | 更新日期: 2023-09-27 18:25:40
我觉得这是一个非常简单的问题,但这不是我以前必须要做的事情。
我有一个MVVM项目,它链接到一个DAL,它有两种类型的对象,一个图像和一个卡。图像和卡片都有单独的表格,卡片包含三个连接到图像表格的关系,因此每个卡片都有三个图像链接。
现在,我的XAML中有一个ListBox,它使用卡片列表作为数据源,但我希望将其中一个图像显示为数据模板的一部分。这是我的XAML:
<ListBox ItemsSource="{Binding AllCards}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Width="100" Height="100" Source="{Binding }" />
<TextBlock VerticalAlignment="Center" Margin="10,0,0,0" Width="300" Text="{Binding CardName}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
编辑#1这是我的卡片型号:
public class Card
{
public int Id { get; set; }
public string CardName { get; set; }
public int Image1 { get; set; }
public int Image2 { get; set; }
public int Image3 { get; set; }
}
图像模型是这样的:
public class Image
{
public int ImageId { get; set; }
public string Imagepath { get; set; }
public string ImageName{ get; set; }
}
如果您的card
模型看起来像这样。。。
public class Card
{
public int Id { get; set; }
public string CardName { get; set; }
public BitmapImage Image1 { get; set; }
public BitmapImage Image2 { get; set; }
public BitmapImage Image3 { get; set; }
}
那么这就是小菜一碟,你只需要这样做:
<ListBox ItemsSource="{Binding AllCards}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Width="100"
Height="100"
Source="{Binding Image1}" />
<TextBlock
VerticalAlignment="Center"
Margin="10,0,0,0"
Width="300"
Text="{Binding CardName}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
但是如果你的Card
模型是这样的。。。
public class Card
{
public int Id { get; set; }
public string CardName { get; set; }
public int Image1Id { get; set; }
public int Image2Id { get; set; }
public int Image3Id { get; set; }
}
然后,您可能需要创建一个具有BitmapImage
属性而不是Id
属性的CardViewModel
,并且需要从Card
映射到视图模型。
如果您需要从文件加载图像或从Bitmap
(与BitmapImage
不同)进行转换,这里有几个转换器:
public BitmapImage Import(string path, bool isRelativePath)
{
var fullPath = GetFullPath(path, isRelativePath);
var buffer = File.ReadAllBytes(fullPath);
MemoryStream stream = new MemoryStream(buffer);
var bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.StreamSource = stream;
bitmapImage.EndInit();
return bitmapImage;
}
public BitmapImage BitmapToBitmapImage(Bitmap bitmap)
{
var stream = new MemoryStream();
bitmap.Save(stream, ImageFormat.Png);
var bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.StreamSource = stream;
bitmapImage.EndInit();
return bitmapImage;
}
public string GetFullPath(string path, bool isRelativePath)
{
return isRelativePath ? FolderPaths.Application + @"'" + path : path;
}