MVVM模式下WPF动态展示图片,界面选择图标,复制到项目中固定目录下面,保存到数据库的是相对路径,再次读取的时候是根据数据库的相对路径去获取项目中绝对路径的图片展示。

首先在ViewModel中
//属性定义
BitmapImage _ImageSource;
/// <summary>
/// 显示的图标
/// </summary>
public BitmapImage ImageSource
{
get { return _ImageSource; }
set
{
_ImageSource = value;
NotifyOfPropertyChange("ImageSource");
}
}
string _ImagePath;
/// <summary>
/// 显示的图标路径
/// </summary>
public string ImagePath
{
get { return _ImagePath; }
set
{
_ImagePath = value;
NotifyOfPropertyChange("ImagePath");
}
}
//初始化数据
//编辑的时候绑定数据
public GroupInfoViewModel(sys_Right_Group groupInfo, OperType type)
{
if (type == OperType.Edit || type == OperType.Show)
{
IsAdd = false;
TitleName = "编辑分组";
RightGroup = groupInfo;
ImagePath = groupInfo.ImagePath;
GetImgData(groupInfo.ImagePath);
}
}
/// <summary>
/// 获取图片数据
/// </summary>
/// <param name="imgPath">相对路径</param>
private void GetImgData(string imgPath)
{
if (string.IsNullOrEmpty(imgPath)) return;
try
{
string fileName = System.Environment.CurrentDirectory + imgPath; //获取文件的绝对路径
byte[] buf;
if (!PathToByte(fileName, out buf))
{
MessageHelper.ShowAutoCloseWarning("获取图标失败");
return;
}
ImageSource =ByteToImage(buf);
}
catch (Exception ex)
{
throw ex;
}
}
//界面选择图片按钮事件
/// <summary>
/// 修改图片
/// </summary>
public void ChangedIcon()
{
try
{
OpenFileDialog open = new OpenFileDialog();
open.Filter = string.Format("照片|*.jpg;*.jpeg;*.png;*.gif;*.bmp");
if (open.ShowDialog() == true)
{
var path = open.FileName;
//检查图标目录,绝对路径下面
string NewPath = System.Environment.CurrentDirectory + @"\Images\Tile\Group\";
string newFile = NewPath + Path.GetFileName(path);
if (!System.IO.Directory.Exists(NewPath))
{
System.IO.Directory.CreateDirectory(NewPath);
}
File.Copy(path, newFile, true); //复制文件到目录绝对路径文件夹
FileInfo info = new FileInfo(newFile); //新文件
if (info.Length > MenuViewModel.UserImageMaxLength)
{
MessageHelper.ShowAutoCloseWarning(string.Format("图标不能大于{0}M",
MenuViewModel.UserImageMaxLength / 1024 / 1024));
return;
}
byte[] buf;
if (!PathToByte(path, out buf))
{
MessageHelper.ShowAutoCloseWarning("修改失败");
return;
}
ImageSource = ByteToImage(buf);
ImagePath = @"\Images\Tile\Group\" + Path.GetFileName(path); //显示相对路径
}
}
catch (Exception ex)
{
throw ex;
}
}
点击保存的时候再把相对路径保存到数据库RightGroup.ImagePath = ImagePath;
//公共帮助方法
//把图片文件转换为byte数组
public static bool PathToByte(string path, out byte[] buffer)
{
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
try
{
buffer = new byte[fs.Length];
fs.Read(buffer, 0, (int)fs.Length);
return true;
}
catch (Exception ex)
{
buffer = null;
return false;
}
finally
{
if (fs != null)
{
//关闭资源
fs.Close();
}
}
}
//把byte数组转化为BitmapImage
public static BitmapImage ByteToImage(byte[] buf)
{
BitmapImage bmp = new BitmapImage();
bmp.BeginInit();
bmp.StreamSource = new MemoryStream(buf);
bmp.EndInit();
return bmp;
}
View 界面绑定代码:
<Button Grid.Row="0" Grid.Column="0" Content="选择图片" cm:Message.Attach="[Click]=[ChangedIcon()]" Style="{StaticResource BtnOperationStyle}" Height="20" Width="70"></Button>
<Grid Grid.Row="0" Grid.Column="1" Background="LightGray">
<Image Height="120" Width="150" Stretch="Fill" Source="{Binding ImageSource,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></Image>
</Grid>
<Label Grid.Row="1" Grid.Column="0" Style="{StaticResource GridColumnLabelStyle}" Content="路径:"></Label>
<TextBox Grid.Row="1" Grid.Column="1" Style="{StaticResource StyleForTextBox}" Text="{Binding ImagePath,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Height="30" TextAlignment="Center" IsReadOnly="True"></TextBox>
界面效果:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# MVVM
# WPF
# 动态绑定
# 图片
# Android实现MVVM架构数据刷新详解流程
# Android单项绑定MVVM项目模板的方法
# MVVM和MVVMLight框架介绍及在项目中的使用详解
# 绑定
# 的是
# 转化为
# 转换为
# 再把
# 大家多多
# 新文件
# 模式下
# throw
# Exception
# Filter
# ByteToImage
# open
# ChangedIcon
# OpenFileDialog
# buf
# PathToByte
# CurrentDirectory
# byte
# MessageHelper
相关文章:
如何配置WinSCP新建站点的密钥验证步骤?
建站之星北京办公室:智能建站系统与小程序生成方案解析
c# Task.ConfigureAwait(true) 在什么场景下是必须的
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
如何在宝塔面板中创建新站点?
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
C#怎么使用委托和事件 C# delegate与event编程方法
建站之星如何开启自定义404页面避免用户流失?
如何快速生成ASP一键建站模板并优化安全性?
香港网站服务器数量如何影响SEO优化效果?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
建站主机选购指南与交易推荐:核心配置解析
制作营销网站公司,淘特是干什么用的?
建站之星安装失败:服务器环境不兼容?
高性价比服务器租赁——企业级配置与24小时运维服务
制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?
文字头像制作网站推荐软件,醒图能自动配文字吗?
如何配置IIS站点权限与局域网访问?
TestNG的testng.xml配置文件怎么写
高端网站建设与定制开发一站式解决方案 中企动力
制作证书网站有哪些,全国城建培训中心证书查询官网?
官网网站制作腾讯审核要多久,联想路由器newifi官网
如何通过西部数码建站助手快速创建专业网站?
深圳网站制作平台,深圳市做网站好的公司有哪些?
如何通过虚拟主机空间快速建站?
广东专业制作网站有哪些,广东省能源集团有限公司官网?
制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?
如何通过VPS建站无需域名直接访问?
建站主机SSH密钥生成步骤及常见问题解答?
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
建站之星后台管理系统如何操作?
如何在云指建站中生成FTP站点?
购物网站制作公司有哪些,哪个购物网站比较好?
如何获取PHP WAP自助建站系统源码?
天津个人网站制作公司,天津网约车驾驶员从业资格证官网?
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
C#怎么创建控制台应用 C# Console App项目创建方法
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
如何通过多用户协作模板快速搭建高效企业网站?
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
如何在宝塔面板创建新站点?
如何通过服务器快速搭建网站?完整步骤解析
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
Android滚轮选择时间控件使用详解
油猴 教程,油猴搜脚本为什么会网页无法显示?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
*请认真填写需求信息,我们会在24小时内与您取得联系。