這篇文章主要為大家展示了“MVVM模式下WPF如何動(dòng)態(tài)綁定展示圖片”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“MVVM模式下WPF如何動(dòng)態(tài)綁定展示圖片”這篇文章吧。
集寧ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書(shū)合作)期待與您的合作!MVVM模式下WPF動(dòng)態(tài)展示圖片,界面選擇圖標(biāo),復(fù)制到項(xiàng)目中固定目錄下面,保存到數(shù)據(jù)庫(kù)的是相對(duì)路徑,再次讀取的時(shí)候是根據(jù)數(shù)據(jù)庫(kù)的相對(duì)路徑去獲取項(xiàng)目中絕對(duì)路徑的圖片展示。
首先在ViewModel中
//屬性定義 BitmapImage _ImageSource; ////// 顯示的圖標(biāo) /// public BitmapImage ImageSource { get { return _ImageSource; } set { _ImageSource = value; NotifyOfPropertyChange("ImageSource"); } } string _ImagePath; ////// 顯示的圖標(biāo)路徑 /// public string ImagePath { get { return _ImagePath; } set { _ImagePath = value; NotifyOfPropertyChange("ImagePath"); } }
//初始化數(shù)據(jù) //編輯的時(shí)候綁定數(shù)據(jù) 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); } } ////// 獲取圖片數(shù)據(jù) /// /// 相對(duì)路徑 private void GetImgData(string imgPath) { if (string.IsNullOrEmpty(imgPath)) return; try { string fileName = System.Environment.CurrentDirectory + imgPath; //獲取文件的絕對(duì)路徑 byte[] buf; if (!PathToByte(fileName, out buf)) { MessageHelper.ShowAutoCloseWarning("獲取圖標(biāo)失敗"); 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; //檢查圖標(biāo)目錄,絕對(duì)路徑下面 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); //復(fù)制文件到目錄絕對(duì)路徑文件夾 FileInfo info = new FileInfo(newFile); //新文件 if (info.Length > MenuViewModel.UserImageMaxLength) { MessageHelper.ShowAutoCloseWarning(string.Format("圖標(biāo)不能大于{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); //顯示相對(duì)路徑 } } catch (Exception ex) { throw ex; } }
點(diǎn)擊保存的時(shí)候再把相對(duì)路徑保存到數(shù)據(jù)庫(kù)RightGroup.ImagePath = ImagePath;
//公共幫助方法 //把圖片文件轉(zhuǎn)換為byte數(shù)組 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) { //關(guān)閉資源 fs.Close(); } } } //把byte數(shù)組轉(zhuǎn)化為BitmapImage public static BitmapImage ByteToImage(byte[] buf) { BitmapImage bmp = new BitmapImage(); bmp.BeginInit(); bmp.StreamSource = new MemoryStream(buf); bmp.EndInit(); return bmp; }
View 界面綁定代碼:
界面效果:
以上是“MVVM模式下WPF如何動(dòng)態(tài)綁定展示圖片”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!