全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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>

界面效果:

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


# MVVM  # WPF  # 动态绑定  # 图片  # Android实现MVVM架构数据刷新详解流程  # Android单项绑定MVVM项目模板的方法  # MVVM和MVVMLight框架介绍及在项目中的使用详解  # 绑定  # 的是  # 转化为  # 转换为  # 再把  # 大家多多  # 新文件  # 模式下  # throw  # Exception  # Filter  # ByteToImage  # open  # ChangedIcon  # OpenFileDialog  # buf  # PathToByte  # CurrentDirectory  # byte  # MessageHelper 


相关文章: ,想在网上投简历,哪几个网站比较好?  XML的“混合内容”是什么 怎么用DTD或XSD定义  网站代码制作软件有哪些,如何生成自己网站的代码?  成都响应式网站开发,dw怎么把手机适应页面变成网页?  制作企业网站建设方案,怎样建设一个公司网站?  如何快速搭建高效WAP手机网站?  如何快速搭建虚拟主机网站?新手必看指南  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  如何在Ubuntu系统下快速搭建WordPress个人网站?  ,购物网站怎么盈利呢?  公众号网站制作网页,微信公众号怎么制作?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  活动邀请函制作网站有哪些,活动邀请函文案?  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  seo网站制作优化,网站SEO优化步骤有哪些?  如何在IIS7中新建站点?详细步骤解析  c# 在高并发场景下,委托和接口调用的性能对比  深圳网站制作案例,网页的相关名词有哪些?  移民网站制作流程,怎么看加拿大移民官网?  如何批量查询域名的建站时间记录?  建站主机如何选?高性价比方案全解析  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  如何优化Golang Web性能_Golang HTTP服务器性能提升方法  招贴海报怎么做,什么是海报招贴?  如何在服务器上配置二级域名建站?  专业网站建设制作报价,网页设计制作要考什么证?  如何挑选高效建站主机与优质域名?  网站按钮制作软件,如何实现网页中按钮的自动点击?  智能起名网站制作软件有哪些,制作logo的软件?  建站VPS能否同时实现高效与安全翻墙?  如何用免费手机建站系统零基础打造专业网站?  官网网站制作腾讯审核要多久,联想路由器newifi官网  宝塔建站教程:一键部署配置流程与SEO优化实战指南  定制建站模板如何实现SEO优化与智能系统配置?18字教程  Android自定义控件实现温度旋转按钮效果  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  如何在阿里云部署织梦网站?  ,网站推广常用方法?  海南网站制作公司有哪些,海口网是哪家的?  怀化网站制作公司,怀化新生儿上户网上办理流程?  如何在腾讯云免费申请建站?  免费制作小说封面的网站有哪些,怎么接网站批量的封面单?  如何在建站宝盒中设置产品搜索功能?  安徽网站建设与外贸建站服务专业定制方案  保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?  如何用AWS免费套餐快速搭建高效网站?  如何通过wdcp面板快速创建网站?  建站之星安装后如何配置SEO及设计样式?  建站之星免费模板:自助建站系统与智能响应式一键生成  高性价比服务器租赁——企业级配置与24小时运维服务 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。