qmlnet/samples/PhotoFrame/PhotoFrame.Logic/UI/ViewModels/ViewModelBase.cs
2018-08-09 16:52:06 -04:00

67 lines
2 KiB
C#

using PhotoFrame.Logic.BL;
using PhotoFrame.Logic.Config;
using System;
using System.ComponentModel;
using System.Runtime.CompilerServices;
namespace PhotoFrame.Logic.UI.ViewModels
{
public abstract class ViewModelBase : IViewModel, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected IFrameController FrameController { get; }
protected readonly IFrameConfig FrameConfig;
// ReSharper disable once MemberCanBePrivate.Global
public bool IsStopped { get; private set; }
private string _imageUri = "";
public string ImageUri
{
get => _imageUri;
private set
{
if (string.Equals(_imageUri, value)) return;
_imageUri = value;
RaisePropertyChanged();
}
}
public void Stop()
{
IsStopped = true;
FrameController.CurrentPhotoChanged -= FrameController_CurrentPhotoChanged;
}
private static int _counter;
protected ViewModelBase(IFrameController frameController, IFrameConfig config)
{
FrameController = frameController;
FrameConfig = config;
ImageUri = frameController.CurrentPhoto;
FrameController.CurrentPhotoChanged += FrameController_CurrentPhotoChanged;
_counter++;
Console.WriteLine($"Number of ViewModels: {_counter}");
}
private void FrameController_CurrentPhotoChanged(object sender, CurrentPhotoChangedEventArgs e)
{
if (!IsStopped)
{
ImageUri = FrameController.CurrentPhoto;
}
}
~ViewModelBase()
{
_counter--;
Console.WriteLine($"Number of ViewModels: {_counter}");
}
protected void RaisePropertyChanged([CallerMemberName]string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}