using System.Threading.Tasks;
using StrixMusic.Sdk.AppModels;
using StrixMusic.Sdk.ViewModels;
using StrixMusic.Sdk.WinUI.Controls.Items.Abstract;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
namespace StrixMusic.Sdk.WinUI.Controls.Items
{
///
/// A Templated for displaying an in a list.
///
public partial class PlaylistItem : ItemControl
{
///
/// Initializes a new instance of the class.
///
public PlaylistItem()
{
this.DefaultStyleKey = typeof(PlaylistItem);
AttachEvents();
}
private void AttachEvents()
{
Loaded += PlaylistItem_Loaded;
Unloaded += PlaylistItem_Unloaded;
}
private void DetachEvents()
{
Unloaded -= PlaylistItem_Unloaded;
}
private void PlaylistItem_Unloaded(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
DetachEvents();
}
private void PlaylistItem_Loaded(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
Loaded -= PlaylistItem_Loaded;
}
///
/// Backing dependency property for .
///
public static readonly DependencyProperty PlaylistProperty = DependencyProperty.Register(nameof(Playlist), typeof(IPlaylist), typeof(PlaylistItem),
new PropertyMetadata(null, (s, e) => ((PlaylistItem)s).OnPlaylistChanged()));
///
/// Backing dependency property for .
///
public static readonly DependencyProperty PlaylistVmProperty = DependencyProperty.Register(nameof(PlaylistVm), typeof(PlaylistViewModel), typeof(PlaylistItem),
new PropertyMetadata(null));
///
/// The playlist to display.
///
public IPlaylist? Playlist
{
get => (IPlaylist?)GetValue(PlaylistProperty);
set => SetValue(PlaylistProperty, value);
}
///
/// The Playlist view model to display.
///
public PlaylistViewModel? PlaylistVm
{
get => (PlaylistViewModel?)GetValue(PlaylistVmProperty);
set => SetValue(PlaylistVmProperty, value);
}
private void OnPlaylistChanged()
{
if (Playlist is null)
{
PlaylistVm = null;
return;
}
if (Playlist is not PlaylistViewModel pvm)
pvm = new PlaylistViewModel(Playlist);
PlaylistVm = pvm;
_ = PlaylistVm.InitAsync();
}
}
}