xaml页面关闭后运行代码

时间:2014-06-16 15:51:51

标签: c# xaml windows-phone-8

我正在为XAML和C#编写WP8的音乐播放器应用程序,但是来自winforms背景我不知道如何执行以下操作。

我的主页面会打开一个单独的页面来显示音乐专辑的曲目。用户可以选择其中一些曲目,然后将其添加到工作正常的中央播放列表中,但我希望主页在歌曲选择页面关闭时调用其播放列表刷新功能。

如果我这样做,我会做类似的事情:

    private void ShowAlbumPage(Int16 albumId)
    {
        albumPage.albumId = albumId;
        albumPage.ShowDialog();
        RefreshPlaylist();
    }

但这不适用于XAML

我目前有这个:

    private void ShowAlbumPage(Int16 albumId)
    {
        NavigationService.Navigate(new Uri("/AlbumPage.xaml?albumId=" + albumId.ToString(), UriKind.Relative));
    }

有关如何以及何时调用RefreshPlaylist的任何建议?

3 个答案:

答案 0 :(得分:1)

这是一个模糊的想法,但我想如果我分享我也可以改善。您可以将List传递给AlbumPage(当前集合),如果用户将歌曲添加到播放列表,将其添加到集合中,返回时只需发回集合并更新主页。

 // MainPage.Xaml
private void list_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    SongsList selectedItemData = SelectedItem as SongsList ;
    if(selectedItemData != null)
    {
       NavigationService.Navigate(new Uri(string.Format("/AlbumPage.xaml?parameter={0}",selectedItemData.ID ), UriKind.Relative));
    }
}

//AlbumPAge.Xaml

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
string parameter = this.NavigationContext.QueryString["parameter"];

SongsList country = null;

 // GETS THE SONG COLLECTION HERE , UPDATE WHEN USER ADD TO PLAYLIST , AND RETURN BACK.
}


**If your doing on MVVM Way .This is just an Idea not tested.** 

视图模型包含歌曲集合,在两个页面上保持相同的视图模型,更新歌曲集合,以便主页UI自动更新。

ViewModel在相册页面上保持相同。

ObservableCollection<Songs> _songs=new ObservableCollection<Songs>();
_songs.Add(new songs{Artist="ArtistName",Album="AlbumName"});

// AlbumPage CodeBehind。

private AddSongtoPlaylist(Song currentSong)
{
  _songs.Add(currentSong);
}

Reference

答案 1 :(得分:0)

您可以通过以下方式完成此任务:

  • PhoneApplicationService.State字典的应用程序级别添加新选择的歌曲。每当您返回主页面时,请加载包含添加的歌曲的瞬态状态。
  • 将它们保存在应用程序级别的变量上,每当导航到主页面时加载播放列表。
  • 将它们存储在IsolatedStorage中,并在导航到主页时加载它们。
  • 通过导航QueryString将其传回主页。

您选择的方法只是个人偏好的问题。

答案 2 :(得分:0)

我想我找到了一个相当简单的解决方法 - 我刚刚在MainPage.xaml的OnNavigatedTo方法中调用了RefreshPlayQueue()。这似乎有效