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(); } } }