Files
NebulaLauncher/Nebula.Launcher/ViewModels/ViewModelBase.cs
2024-12-26 18:54:37 +03:00

51 lines
1.3 KiB
C#

using System;
using System.Diagnostics.CodeAnalysis;
using Avalonia.Controls;
using CommunityToolkit.Mvvm.ComponentModel;
namespace Nebula.Launcher.ViewModels;
public abstract class ViewModelBase : ObservableObject
{
private readonly IServiceProvider _serviceProvider;
public ViewModelBase()
{
AssertDesignMode();
_serviceProvider = default!;
}
public ViewModelBase(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public bool TryGetViewModel(Type type,[NotNullWhen(true)] out ViewModelBase? viewModelBase)
{
viewModelBase = null;
var vm = Design.IsDesignMode
? Activator.CreateInstance(type)
: _serviceProvider.GetService(type);
if (vm is not ViewModelBase vmb) return false;
viewModelBase = vmb;
return true;
}
public bool TryGetViewModel<T>([NotNullWhen(true)] out T? viewModelBase) where T: ViewModelBase
{
var success = TryGetViewModel(typeof(T), out var vmb);
viewModelBase = (T?)vmb;
return success;
}
public T GetViewModel<T>() where T: ViewModelBase
{
TryGetViewModel<T>(out var viewModelBase);
return viewModelBase!;
}
public void AssertDesignMode()
{
if (!Design.IsDesignMode) throw new Exception();
}
}