// Copyright (c) Arlo Godfrey. All Rights Reserved. // Licensed under the GNU Lesser General Public License, Version 3.0 with additional terms. // See the LICENSE, LICENSE.LESSER and LICENSE.ADDITIONAL files in the project root for more information. using System; using System.ComponentModel; using System.Threading; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using OwlCore; using StrixMusic.Sdk.AppModels; namespace StrixMusic.Sdk.ViewModels.Notifications { /// /// A view model wrapper for the class. /// [Bindable(true)] public sealed class NotificationViewModel : ObservableObject, IDisposable { private readonly SynchronizationContext _syncContext; private AbstractUINotificationViewModel _abstractUINotificationViewModel; /// /// The original notification model. /// public Notification Model { get; } /// /// Creates a new instance of . /// /// The backing model. public NotificationViewModel(Notification model) { _syncContext = SynchronizationContext.Current; Model = model; _abstractUINotificationViewModel = new AbstractUINotificationViewModel(model.AbstractUICollection); DismissCommand = new RelayCommand(model.Dismiss); } /// /// The view model of the Notification being show. /// public AbstractUINotificationViewModel AbstractUINotificationViewModel { get => _abstractUINotificationViewModel; set { _abstractUINotificationViewModel = value; _syncContext.Post(_ => OnPropertyChanged(nameof(AbstractUINotificationViewModel)), null); } } /// /// Handles dismissing the notification via a bindable command. /// public IRelayCommand DismissCommand { get; set; } /// public void Dispose() => _abstractUINotificationViewModel?.Dispose(); } }