MVVM模式下WPF动态展示图片,界面选择图标,复制到项目中固定目录下面,保存到数据库的是相对路径,再次读取的时候是根据数据库的相对路径去获取项目中绝对路径的图片展示。
首先在视图模型中
//属性定义BitmapImage _ ImageSource///摘要///显示的图标////摘要公共bitmapimagesource { get { return _ ImageSource;}设置{ _ ImageSource=valuenotifyofpertychange(' ImageSource ');} } string _ ImagePath///摘要///显示的图标路径////摘要公共字符串ImagePath { get { return _ ImagePath;}设置{ _ ImagePath=valuenotifyofpertychange(' ImagePath ');} }//初始化数据//编辑的时候绑定数据公共组信息视图模型(系统_右_组信息,操作类型类型){ if(type==Opetype .编辑||类型==操作类型show){ IsAdd=false;TitleName='编辑分组;right GrouP=GrouP info imagepath=GrouP info .ImagePathgetmgdata(GroupInfo .ImagePath);} } ///摘要///获取图片数据////summary///param name=' IMgpath '相对路径/param private void getmgdata(字符串imgPath) { if(字符串IsNullOrEmpty(imgPath))返回;尝试{字符串文件名=系统。环境。当前目录路径;//获取文件的绝对路径byte[]buf;if(!路径字节(fileName,out buf)) { MessageHelper . '' ShowAutoCloseWarning('获取图标失败');返回;} ImageSource=Bytetoimage(buf);} catch(Exception ex){ throw ex;} }
//界面选择图片按钮事件///摘要///修改图片////summary public void ChangedIcon(){ try { open file dialog open=new open file dialog();打开过滤器=字符串。格式('照片|*.jpg*。jpeg*。巴布亚新几内亚;*.gif*。BMP’);如果(打开ShowDialog()==true){ var path=open .文件名;//检查图标目录,绝对路径下面字符串新路径=系统。环境。当前目录@ ' 图像切片组 ';字符串新文件=新路径路径. GetFileName(路径);if(!系统。目录存在(新路径)){系统IO。目录。创建目录(新路径);}文件。复制(路径,新文件,真);//复制文件到目录绝对路径文件夹文件信息=新文件信息(新文件);//新文件如果(信息。长度MenuViewModel .useimagemaxlength){ MessageHelper .ShowAutoCloseWarning(字符串。格式('图标不能大于{0}M ',MenuViewModel .useimagemaxlength/1024/1024));返回;} byte[]buf;if(!路径字节(路径,out buf)) { MessageHelper .' ShowAutoCloseWarning('修改失败');返回;} ImageSource=Bytetoimage(buf);图像路径=@ ' 图像平铺组'路径. GetFileName(路径);//显示相对路径} } catch(Exception ex){ throw ex;} }点击保存的时候再把相对路径保存到数据库RightGroup .ImagePath=ImagePath
//公共帮助方法//把图片文件转换为字节数组公共静态bool路径字节(字符串路径,输出字节[]缓冲区){ FileStream fs=新的FileStream(路径,文件模式.打开,文件访问。阅读);尝试{ buffer=新字节[fs .长度];fs .Read(buffer,0,(int)fs .长度);返回真;} catch(Exception ex){ buffer=null;返回false}最后{ if (fs!=null) { //关闭资源fs .close();} } }//把字节数组转化为位图图像公共静态BitmapImage字节图像(byte[]buf){ BitmapImage BMP=new BitmapImage();bmp .BeginInit();bmp .流源=新内存流(buf);bmp .end init();返回bmp}视图界面绑定代码:
按钮网格。行="0"网格。列='0 '内容='选择图片cm :消息附加='[单击]=[更改图标()]'样式=' {静态资源btnooperationstyle } '高度=' 20 '宽度=' 70 '/按钮网格.行="0"网格。列='1 '背景='浅灰色'图像高度='120 '宽度='150 '拉伸='填充'源=' {绑定图像源,模式=双向,更新源触发器=属性已更改} '/图像/网格标签网格。行="1"网格。列="0"样式=" { static resource GridColumnLabelStyle } "内容="路径:'/LabelTextBox网格。行="1"网格。列='1 '样式=“{文本框的静态资源样式}”文本=' {绑定图像路径,模式=双向,更新源触发器=属性已更改} '高度='30 '文本对齐=“中心”是只读的=“真”/文本框界面效果:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。