using OwlCore.Extensions; using StrixMusic.Sdk.AppModels; using StrixMusic.Sdk.ViewModels; using StrixMusic.Shells.Groove.ViewModels.Collections; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; namespace StrixMusic.Shells.Groove.Controls.Collections { /// /// A for displaying s in the Groove Shell. /// public partial class GroovePlaylistCollection : Control { /// /// Initializes a new instance of the class. /// public GroovePlaylistCollection() { DataContext = this; this.DefaultStyleKey = typeof(GroovePlaylistCollection); } /// /// The backing dependency property for . /// public static readonly DependencyProperty CollectionProperty = DependencyProperty.Register(nameof(Collection), typeof(IPlaylistCollection), typeof(GroovePlaylistCollection), new PropertyMetadata(null, (d, e) => d.Cast().OnPlaylistCollectionChanged())); /// /// A view model for this control. /// public GroovePlaylistCollectionViewModel ViewModel { get => (GroovePlaylistCollectionViewModel)GetValue(ViewModelProperty); set => SetValue(ViewModelProperty, value); } /// /// The backing Dependency Property for . /// public static readonly DependencyProperty ViewModelProperty = DependencyProperty.Register("ViewModel", typeof(GroovePlaylistCollectionViewModel), typeof(GroovePlaylistCollection), new PropertyMetadata(new GroovePlaylistCollectionViewModel())); /// /// The playlist collection to display. /// public IPlaylistCollection? Collection { get => (IPlaylistCollection)GetValue(CollectionProperty); set => SetValue(CollectionProperty, value); } private void OnPlaylistCollectionChanged() { if (Collection is null) return; if (Collection is not IPlaylistCollectionViewModel pvm) pvm = new PlaylistCollectionViewModel(Collection); _ = pvm.InitPlaylistCollectionAsync(); ViewModel.PlaylistCollection = pvm; } /// /// Clears the selected item in the . /// public void ClearSelected() { ViewModel.SelectedPlaylist = null!; } } }