Add foundation
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user