ListVIew 绑定图片
最近在写一个小软件,想添加商品的预览效果,大概就是给listview增加图片binding。
效果如下:
MainWIndow.xmal
<GroupBox Grid.Column="1" Header="图片预览">
<Grid>
<ListView ItemsSource="{Binding}" Name="LvImg">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical" VerticalAlignment="Stretch">
<Image Source="{Binding Image}" HorizontalAlignment="Center"
VerticalAlignment="Top" />
<TextBlock Text="{Binding Title}" HorizontalAlignment="Center"
VerticalAlignment="Bottom" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</GroupBox>
显示图片(这种方式存在的问题是会占用图片,也就是长期站着茅坑,文件不能进行写操作,如果需要在渲染图片时不占用可以考虑直接读入bytes到bitmap里面就可以了)
private void ShowImages(int goodsNo)
{
//清空控件
//LvImg.Items.Clear();
LvImg.ItemsSource = null; //清空绑定
//图片文件夹不存在
var path = Path.Combine("", goodsNo + "");
if (!Directory.Exists(path)) return;
//TODO 判断文件的扩展名
//获取图片列表
var files = Directory.GetFiles(path);
var imgList = new ObservableCollection<ImgShow>();
foreach (var file in files)
{
//创建控件,TODO 直接读取到内存
var fs = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, file);
var bmp = new BitmapImage(new Uri(fs));
var dt = new ImgShow {Image = bmp, Title = file};
imgList.Add(dt);
}
LvImg.ItemsSource = imgList;
}