首页后端开发ASP.NETMVVM模式下WPF动态展示图片实例分析

MVVM模式下WPF动态展示图片实例分析

时间2024-01-30 10:11:02发布访客分类ASP.NET浏览528
导读:收集整理的这篇文章主要介绍了MVVM模式下WPF动态展示图片实例分析,觉得挺不错的,现在分享给大家,也给大家做个参考。这篇文章主要为大家详细介绍了MVVM模式下WPF动态绑定展示图片的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一...
收集整理的这篇文章主要介绍了MVVM模式下WPF动态展示图片实例分析,觉得挺不错的,现在分享给大家,也给大家做个参考。这篇文章主要为大家详细介绍了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动态展示图片实例分析的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

MVVM展示

若转载请注明出处: MVVM模式下WPF动态展示图片实例分析
本文地址: https://pptw.com/jishu/592383.html
介绍一个微软开源项目网站--CodePlex 深入浅析Angular中怎么使用依赖注入

游客 回复需填写必要信息