Files

72 lines
2.0 KiB
C#

using System;
using System.IO;
using System.Threading.Tasks;
using Avalonia.Media.Imaging;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.Mvvm.Messaging;
using GazpromApp.Messages;
using GazpromApp.Models;
namespace GazpromApp.ViewModels;
public partial class ImageViewModel : ViewModelBase
{
public ViewModelBase? Parent;
private Image Image { get; }
[ObservableProperty] private byte[]? _bytes;
[ObservableProperty] private DateTime _creationDate;
// EF stuff
[ObservableProperty] private Point? _point;
[ObservableProperty] private Equipment? _equipment;
[ObservableProperty] private Bitmap? _fileName;
[RelayCommand]
private async Task ViewImage() => _ = await WeakReferenceMessenger.Default.Send(new ViewImageMessage(this));
[RelayCommand]
private void DeleteImage() => _ = Parent switch
{
PointViewModel pmv => pmv.Images.Remove(this),
EquipmentViewModel emv => emv.Images.Remove(this),
EditPointViewModel editPointViewModel => editPointViewModel.Images.Remove(this),
EditEquipmentViewModel editEquipmentViewModel => editEquipmentViewModel.Images.Remove(this),
_ => false
};
public ImageViewModel(Image image)
{
Bytes = image.Bytes;
CreationDate = image.CreationDate;
Equipment = image.Equipment;
Point = image.Point;
FileName = image.Bytes is { Length: > 0 } ? new Bitmap(new MemoryStream(image.Bytes)) : null;
Image = image;
}
public ImageViewModel()
{
Bytes = null;
CreationDate = DateTime.Now;
Equipment = null;
Point = null;
Image = new Image();
}
public Image GetImage()
{
var ms = new MemoryStream();
FileName?.Save(ms);
Image.Bytes = ms.ToArray();
Image.CreationDate = CreationDate;
Image.Equipment = Equipment;
Image.Point = Point;
return Image;
}
}