using Avalar.Models.Interfaces; using Avalonia.Media.Imaging; using Avalonia.Threading; using ReactiveUI; using System; using System.ComponentModel; namespace Avalar.ViewModels.Image { public class ImageLoadedViewModel : ReactiveObject { private IImageModel m_ImageModel; public ImageLoadedViewModel(IBitmap bitmap, IImageModel imageModel) { Bitmap = bitmap; m_ImageModel = imageModel ?? throw new ArgumentNullException(nameof(imageModel)); m_ImageModel.PropertyChanged += OnImageModelChanged; } private void OnImageModelChanged(object sender, PropertyChangedEventArgs e) { Dispatcher.UIThread.InvokeAsync(() => { Bitmap = m_ImageModel.LatestResult; }); } private IBitmap m_Bitmap; public IBitmap Bitmap { get => m_Bitmap; set => this.RaiseAndSetIfChanged(ref m_Bitmap, value); } } }