栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > asp

MVVM模式下WPF动态绑定展示图片

asp 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MVVM模式下WPF动态绑定展示图片

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

首先在ViewModel中

//属性定义
    BitmapImage _ImageSource;
    /// 
    /// 显示的图标
    /// 
    public BitmapImage ImageSource
    {
      get { return _ImageSource; }
      set
      {
 _ImageSource = value;
 NotifyOfPropertyChange("ImageSource");
      }
    }

    string _ImagePath;
    /// 
    /// 显示的图标路径
    /// 
    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);
      }
    }
    /// 
    /// 获取图片数据
    /// 
    /// 相对路径
    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;
      }
    }

//界面选择图片按钮事件
   /// 
    /// 修改图片
    /// 
    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 + @"ImagesTileGroup";
   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 = @"ImagesTileGroup" + 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 界面绑定代码:


   
     
    
   

界面效果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/55536.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号