如何在MVVM模式下绑定动态WPF的效果实现
来源:爱站网时间:2020-06-30编辑:网友分享
在MVVM模式下,WPF动态显示图片,而界面选择图标并将其复制到项目的固定目录,相对路径将保存到数据库中。再次读取时,根据数据库的相对路径得到项目的绝对路径,下面就让爱站技术频道小编来给大家介绍如何在MVVM模式下绑定动态WPF的效果实现。
在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 + @"\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 界面绑定代码:
界面效果:

好了,关于如何在MVVM模式下绑定动态WPF的效果实现爱站技术频道小编就给大家介绍到这里了,相信大家已经有了更深的了解了,希望这篇文章能够给大家带来帮助。
