73 lines
1.6 KiB
C#
73 lines
1.6 KiB
C#
using CommunityToolkit.Mvvm.ComponentModel;
|
|
|
|
namespace Toolkit.Foundation;
|
|
|
|
public partial class ObservableViewModel :
|
|
ObservableObject,
|
|
IObservableViewModel,
|
|
IInitializer,
|
|
IActivated,
|
|
IDeactivating,
|
|
IDeactivated,
|
|
IDeactivatable
|
|
{
|
|
[ObservableProperty]
|
|
private bool isInitialized;
|
|
|
|
public ObservableViewModel(IServiceProvider serviceProvider,
|
|
IServiceFactory serviceFactory,
|
|
IPublisher publisher,
|
|
ISubscriber subscriber,
|
|
IDisposer disposer)
|
|
{
|
|
ServiceProvider = serviceProvider;
|
|
ServiceFactory = serviceFactory;
|
|
Publisher = publisher;
|
|
Disposer = disposer;
|
|
|
|
subscriber.Add(this);
|
|
}
|
|
|
|
public event EventHandler? DeactivateHandler;
|
|
|
|
public IDisposer Disposer { get; }
|
|
|
|
public IPublisher Publisher { get; }
|
|
|
|
public IServiceFactory ServiceFactory { get; }
|
|
|
|
public IServiceProvider ServiceProvider { get; }
|
|
|
|
public virtual Task Activated() =>
|
|
Task.CompletedTask;
|
|
|
|
public Task Deactivate()
|
|
{
|
|
DeactivateHandler?.Invoke(this, new EventArgs());
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
public virtual Task Deactivated() =>
|
|
Task.CompletedTask;
|
|
|
|
public virtual Task Deactivating() =>
|
|
Task.CompletedTask;
|
|
|
|
public void Dispose()
|
|
{
|
|
GC.SuppressFinalize(this);
|
|
Disposer.Dispose(this);
|
|
}
|
|
|
|
public Task Initialize()
|
|
{
|
|
if (IsInitialized)
|
|
{
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
IsInitialized = true;
|
|
return Task.CompletedTask;
|
|
}
|
|
}
|