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!;
}
}
}