>  기사  >  백엔드 개발  >  MVVM 모드의 WPF 동적 디스플레이 이미지 예제 분석

MVVM 모드의 WPF 동적 디스플레이 이미지 예제 분석

零下一度
零下一度원래의
2017-07-02 10:28:392371검색

이 글에서는 주로 MVVM 모드의 WPF 동적 바인딩 표시 그림 관련 정보를 자세히 소개합니다. 관심 있는 친구는 이를 참조할 수 있습니다.

MVVM 모드의 WPF 동적 표시 그림 및 인터페이스 선택 아이콘은 상대 경로는 데이터베이스에 저장되며, 다시 읽으면 데이터베이스의 상대 경로를 기준으로 프로젝트 내 절대 경로의 이미지 표시가 얻어집니다.

First in 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 동적 디스플레이 이미지 예제 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.