|
@@ -1,17 +1,22 @@
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
+using System.ComponentModel;
|
|
|
+using System.IO;
|
|
|
using System.Linq;
|
|
|
using System.Text;
|
|
|
using System.Threading.Tasks;
|
|
|
using System.Windows;
|
|
|
+using System.Windows.Media;
|
|
|
+using System.Windows.Media.Imaging;
|
|
|
|
|
|
namespace MyWpfApp.models
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// источник данных для страницы UserInfo
|
|
|
/// </summary>
|
|
|
- public class User
|
|
|
- {
|
|
|
+ public class User : INotifyPropertyChanged
|
|
|
+ {
|
|
|
+ public event PropertyChangedEventHandler PropertyChanged;
|
|
|
//создаем объекты тех таблиц БД, с которыми необходмо работать (брать или добавлять данные)
|
|
|
UserTable userTable;
|
|
|
LoginedTable loginedTable;
|
|
@@ -24,14 +29,35 @@ namespace MyWpfApp.models
|
|
|
{
|
|
|
this.loginedTable = loginedTable;
|
|
|
userTable = Globals.MyGlobalConnection.UserTable.FirstOrDefault(x => x.ID == loginedTable.ID);
|
|
|
+
|
|
|
+ //получаем последнее изображение пользователя и помещаем его в источник данных для картинки на странице
|
|
|
+ //OrderByDescending нужен, так как в EF не работает LastOrDefault
|
|
|
+ UserImages userImage = Globals.MyGlobalConnection.UserImages.OrderByDescending(x=>x.ID).FirstOrDefault(x => x.IDUser == LoginedTable.ID);
|
|
|
+ if (userImage == null)//если у пользователя в базе нет записей об изображении
|
|
|
+ {
|
|
|
+ imageSource = null;
|
|
|
+ }
|
|
|
+ else //помещаем картинку в IageSource по известному алгоритму
|
|
|
+ {
|
|
|
+ using (MemoryStream stream = new MemoryStream(userImage.Image))
|
|
|
+ {
|
|
|
+ BitmapImage BMimage = new BitmapImage();
|
|
|
+ BMimage.BeginInit();
|
|
|
+ BMimage.CacheOption = BitmapCacheOption.OnLoad;
|
|
|
+ BMimage.StreamSource = stream;
|
|
|
+ BMimage.EndInit();
|
|
|
+ imageSource = BMimage;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// конструктор без аргументов. Используется, если мы создаем нового пользователя
|
|
|
/// </summary>
|
|
|
- public User()
|
|
|
+ public User()
|
|
|
{
|
|
|
loginedTable = new LoginedTable();
|
|
|
- userTable = new UserTable();
|
|
|
+ userTable = new UserTable();
|
|
|
+ imageSource = null;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -45,9 +71,49 @@ namespace MyWpfApp.models
|
|
|
public LoginedTable LoginedTable { get => loginedTable; set => loginedTable = value; }
|
|
|
|
|
|
|
|
|
- string zaglushkaPath = "/Resources/zaglushka.png";
|
|
|
+ string imagePath = "/Resources/zaglushka.png";//путь к заглушке. не меняется в ходе выполнения программы
|
|
|
+ ImageSource imageSource;//источник данных для картинки.
|
|
|
|
|
|
- public string ZaglushkaPath { get => zaglushkaPath; }
|
|
|
+
|
|
|
|
|
|
+ public object ImageBind
|
|
|
+ {
|
|
|
+ get
|
|
|
+ {
|
|
|
+ if (imageSource == null) return imagePath;//если изображения в базе нет, возвращаем путь к заглушке
|
|
|
+ else return imageSource;//иначе возвращаем картинку из базы
|
|
|
+ }
|
|
|
+ set//стандартно с вызовом события обновления отрисовки
|
|
|
+ {
|
|
|
+ imageSource = (ImageSource)value;
|
|
|
+ PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(ImageBind)));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// метод для перевода картинки из массива байт в BitmapImage. Связан со свойством ImageBind
|
|
|
+ /// </summary>
|
|
|
+ public void RefrashImage()
|
|
|
+ {
|
|
|
+ UserImages userImage = Globals.MyGlobalConnection.UserImages.OrderByDescending(x => x.ID).FirstOrDefault(x => x.IDUser == LoginedTable.ID);
|
|
|
+ if (userImage == null)//если у пользователя в базе нет записей об изображении
|
|
|
+ {
|
|
|
+ ImageBind = null;
|
|
|
+ }
|
|
|
+ else //помещаем картинку в IageSource по известному алгоритму
|
|
|
+ {
|
|
|
+ using (MemoryStream stream = new MemoryStream(userImage.Image))
|
|
|
+ {
|
|
|
+ BitmapImage BMimage = new BitmapImage();
|
|
|
+ BMimage.BeginInit();
|
|
|
+ BMimage.CacheOption = BitmapCacheOption.OnLoad;
|
|
|
+ BMimage.StreamSource = stream;
|
|
|
+ BMimage.EndInit();
|
|
|
+ ImageBind= BMimage;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(ImageBind)));
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
}
|