Browse Source

Add ViewModelBase.ViewModelState and OnInitialLoaded virtual method

pull/324/head
Ionite 1 year ago
parent
commit
d734b0666a
No known key found for this signature in database
  1. 15
      StabilityMatrix.Avalonia/Models/ViewModelState.cs
  2. 45
      StabilityMatrix.Avalonia/ViewModels/Base/ViewModelBase.cs

15
StabilityMatrix.Avalonia/Models/ViewModelState.cs

@ -0,0 +1,15 @@
using System;
namespace StabilityMatrix.Avalonia.Models;
/// <summary>
///
/// </summary>
[Flags]
public enum ViewModelState : uint
{
/// <summary>
/// View Model has been initially loaded
/// </summary>
InitialLoaded = 1 << 0,
}

45
StabilityMatrix.Avalonia/ViewModels/Base/ViewModelBase.cs

@ -2,12 +2,16 @@
using System.Threading.Tasks;
using AsyncAwaitBestPractices;
using CommunityToolkit.Mvvm.ComponentModel;
using JetBrains.Annotations;
using StabilityMatrix.Avalonia.Models;
namespace StabilityMatrix.Avalonia.ViewModels.Base;
public class ViewModelBase : ObservableValidator, IRemovableListItem
{
[PublicAPI]
protected ViewModelState ViewModelState { get; private set; }
private WeakEventManager? parentListRemoveRequestedEventManager;
public event EventHandler ParentListRemoveRequested
@ -20,24 +24,51 @@ public class ViewModelBase : ObservableValidator, IRemovableListItem
remove => parentListRemoveRequestedEventManager?.RemoveEventHandler(value);
}
protected void RemoveFromParentList() => parentListRemoveRequestedEventManager?.RaiseEvent(
this, EventArgs.Empty, nameof(ParentListRemoveRequested));
protected void RemoveFromParentList() =>
parentListRemoveRequestedEventManager?.RaiseEvent(
this,
EventArgs.Empty,
nameof(ParentListRemoveRequested)
);
/// <summary>
/// Called when the view's LoadedEvent is fired.
/// </summary>
public virtual void OnLoaded()
{
if (!ViewModelState.HasFlag(ViewModelState.InitialLoaded))
{
ViewModelState |= ViewModelState.InitialLoaded;
OnInitialLoaded();
}
}
/// <summary>
/// Called the first time the view's LoadedEvent is fired.
/// Sets the <see cref="ViewModelState.InitialLoaded"/> flag.
/// </summary>
protected virtual void OnInitialLoaded() { }
/// <summary>
/// Called asynchronously when the view's LoadedEvent is fired.
/// Runs on the UI thread via Dispatcher.UIThread.InvokeAsync.
/// The view loading will not wait for this to complete.
/// </summary>
public virtual Task OnLoadedAsync()
{
return Task.CompletedTask;
}
public virtual void OnUnloaded()
{
}
/// <summary>
/// Called when the view's UnloadedEvent is fired.
/// </summary>
public virtual void OnUnloaded() { }
/// <summary>
/// Called asynchronously when the view's UnloadedEvent is fired.
/// Runs on the UI thread via Dispatcher.UIThread.InvokeAsync.
/// The view loading will not wait for this to complete.
/// </summary>
public virtual Task OnUnloadedAsync()
{
return Task.CompletedTask;

Loading…
Cancel
Save