using System.Threading.Tasks; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using StrixMusic.Sdk.CoreModels; using StrixMusic.Services.CoreManagement; namespace StrixMusic.Shared.ViewModels { /// /// A view model containing metadata about a service (core) that the user can create an instance of. /// public class AvailableServicesItemViewModel : ObservableObject { private readonly ICoreManagementService _coreManagementService; /// /// Initializes a new instance of the class. /// /// A core management service where cores can be re-registered. /// The core metadata to wrap around. public AvailableServicesItemViewModel(ICoreManagementService coreManagementService, CoreMetadata metadata) { _coreManagementService = coreManagementService; Metadata = metadata; CreateCoreInstanceCommand = new AsyncRelayCommand(CreateCoreInstanceAsync); } /// public CoreMetadata Metadata { get; } /// /// Fires when the user selects this item. /// public IAsyncRelayCommand CreateCoreInstanceCommand { get; } private Task CreateCoreInstanceAsync() => _coreManagementService.RegisterCoreInstanceAsync(Metadata); } }