【发布时间】:2019-12-25 15:10:26
【问题描述】:
我有 3 个项目: 数据(实体、DbContext 等) WebAPI (ASP.NET 核心) 桌面管理客户端(WPF、mvvm)
我有带图片的书。
使用 API,我可以从 Data 项目中获取图像(字节 [])和书籍。 在 ViewModel 的管理客户端,我可以看到正确的字节 []。
但我不知道如何在我的窗口显示。
相关代码:
MainWindow.xaml
<StackPanel Grid.Row="2" Orientation="Horizontal" Width="600">
<TextBlock Text="Book ID: " Margin="1" />
<TextBox Width="50" Text="{Binding BookIdProp}" Margin="0" />
<Button Content="Show image" Command="{Binding ShowBookImage}" Width="114" IsEnabled="{Binding IsLoaded}" />
</StackPanel>
我想在这里显示图片:
<ListBox Grid.Row="3" Grid.ColumnSpan="2" Name="imageListBox" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Disabled">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel IsItemsHost="True" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Image Height="100" Width="Auto" Source="{Binding ShowImageCommand, Converter={StaticResource bookImageConverter}}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
现在在视图模型中,我可以通过 bookId(文本框)获取图像的字节 []。 我正在使用数据传输对象。
DTO:
public class ImageDTO
{
public int Id { get; set; }
public int BookId { get; set; }
public byte[] ImageContent { get; set; }
}
public class BookDTO
{
public int Id { get; set; }
public String Title { get; set; }
public String Author { get; set; }
public ImageDTO Image { get; set; }
public BookDTO()
{
Image = new ImageDTO();
}
}
视图模型:
public DelegateCommand ShowImageCommand{ get; private set; }
ShowImageCommand= new ShowImageCommand(param => ShowImage());
private void ShowImage(int id)
{
??
}
转换器:
public object Convert(Object value, Type targetType, Object parameter, CultureInfo culture)
{
if (!(value is Byte[]))
return Binding.DoNothing;
try
{
using (MemoryStream stream = new MemoryStream(value as Byte[]))
{
BitmapImage image = new BitmapImage();
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.StreamSource = stream;
image.EndInit();
return image;
}
}
catch
{
return Binding.DoNothing;
}
}
public object ConvertBack(Object value, Type targetType, Object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
如何在视图模型上绑定以显示正确的图像?
【问题讨论】:
-
这能回答你的问题吗? Convert byte array to image in wpf
-
@PavelAnikhouski 不,我有适当的 byte[] 位图转换器功能,我只是无法在显示转换后的图像的视图模型中编写该功能(或者我无法在视图上绑定或两者兼而有之)。