MVVM模式下WPF动态绑定展示图片
 更新时间:2017年06月30日 11:57:12   作者:Jugg书生  

这篇文章主要为大家详细介绍了MVVM模式下WPF动态绑定展示图片的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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>

界面效果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持华域联盟。

您可能感兴趣的文章:Android单项绑定MVVM项目模板的方法浅析vue中的MVVM实现原理vue中的mvvm模式讲解如何在iOS上使用MVVM进行路由详解vue实现简单的MVVM框架MVVM 双向绑定的实现代码MVC、MVP和MVVM分别是什么_动力节点Java学院整理详解Android的MVVM框架 – 数据绑定JavaScript的MVVM库Vue.js入门学习笔记vue,angular,avalon这三种MVVM框架优缺点详解Android框架MVVM分析以及使用

MVVM
WPF
图片

相关文章
如何使用签名保证ASP.NET MVC OR WEBAPI的接口安全这篇文章主要介绍了如何使用签名保证ASP.NET MVC OR WEBAPI的接口安全,帮助大家更好的理解和学习使用.net技术,感兴趣的朋友可以了解下 2021-04-04
ASP.NET MVC文件上传教程(二)这篇文章主要为大家详细介绍了ASP.NET MVC文件上传第二篇教程,再次深入了解ASP.NET MVC文件上传的实现原理,感兴趣的小伙伴们可以参考一下 2016-05-05
.NET发送邮件的实现方法示例这篇文章主要给大家介绍了关于.NET发送邮件的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用.net具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 2018-06-06
Asp.Net MVC4通过id更新表单内容的思路详解一个表单一旦创建完,其中大部分的字段便不可再编辑。只能编辑其中部分字段。下面通过本文给大家分享Asp.Net MVC4通过id更新表单内容的思路详解,需要的朋友参考下吧 2017-07-07
轻量级asp.net ajax解决方案详解这篇文章主要介绍了轻量级asp.net ajax解决方案,结合实例形式较为详细的分析了asp.net ajax的实现技巧与技术细节,需要的朋友可以参考下 2016-02-02
asp.net开发微信公众平台之获取用户消息并处理这篇文章主要介绍了asp.net开发微信公众平台之获取用户消息并处理的相关资料,需要的朋友可以参考下 2015-06-06
深入浅析WinForm 进程、线程及区别介绍进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。这篇文章主要介绍了WinForm 进程、线程的相关资料,需要的朋友可以参考下 2016-09-09
asp.net MVC下使用rest的方法本篇文章主要介绍了asp.net MVC下使用rest的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
2017-09-09
asp.net checkbox 动态绑定id GridView删除提示asp.net checkbox 动态绑定id,需要的朋友可以参考下。虽然简单但不知道挺麻烦的。GridView删除提示 2009-10-10
ASP.NET记录错误日志的实现方法在本文中,我们将通过一个简单的处理来记录在我们的网站中的错误和异常 2013-05-05

最新评论

声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。