Я изучаю универсальную платформу Windows и в настоящее время анализирую музыкальный проигрыватель с помощью SoundCloud API из этого сайта. Ссылка на проект github находится в самом низу страницы. Чтобы этот проект заработал, необходимо заполнить переменную SoundCloudClientId из App.xaml.cs (я использовал идентификатор клиента из предыдущего примера на той же странице, но не уверен, что смогу его вставить).
Когда приложение запускается, загружается страница NowPlaying, и смена треков приводит к соответствующему обновлению пользовательского интерфейса. Проблема в том, что когда я перехожу на любую другую страницу и возвращаюсь обратно в NowPlaying. Я все еще могу менять музыку с помощью кнопок, но пользовательский интерфейс не меняется (название песни, название альбома и т. д.).
Важные части кода: NowPlaying.xaml
<ImageBrush x:Name="albumrtImage" ImageSource="Assets\Albumart.png" Stretch="UniformToFill" />
<TextBlock x:Name="txtSongTitle" Grid.Row="0" HorizontalAlignment="Center" Text="Song Title " FontSize="25" Foreground="White" Style="{StaticResource HeaderTextBlockStyle}" TextTrimming="WordEllipsis" />
<TextBlock x:Name="txtAlbumTitle" Grid.Row="0" Text="Label " HorizontalAlignment="Center" FontWeight="Light" FontSize="20" Foreground="#9799a5" Style="{StaticResource BodyTextBlockStyle}" TextTrimming="WordEllipsis"/>
NowPlaying.xaml.cs
async void BackgroundMediaPlayer_MessageReceivedFromBackground(object sender, MediaPlayerDataReceivedEventArgs e)
{
TrackChangedMessage trackChangedMessage;
if (MessageService.TryParseMessage(e.Data, out trackChangedMessage))
{
// When foreground app is active change track based on background message
await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
var songIndex = GetSongIndexById(trackChangedMessage.TrackId);
if (songIndex >= 0)
{
var song = App.likes[songIndex];
LoadTrack(song); //Update UI
}
});
return;
}
BackgroundAudioTaskStartedMessage backgroundAudioTaskStartedMessage;
if (MessageService.TryParseMessage(e.Data, out backgroundAudioTaskStartedMessage))
{
backgroundAudioTaskStarted.Set();
return;
}
}
private async void LoadTrack(SoundCloudTrack currentTrack)
{
try
{
//Change album art
string albumartImage = Convert.ToString(currentTrack.artwork_url);
if (string.IsNullOrWhiteSpace(albumartImage))
{
albumartImage = @"ms-appx:///Assets/Albumart.png";
}
else
{
albumartImage = albumartImage.Replace("-large", "-t500x500");
}
//Next 3 lines when pages were switched don't cause UI to update
albumrtImage.ImageSource = new BitmapImage(new Uri(albumartImage));
txtSongTitle.Text = currentTrack.title;
txtAlbumTitle.Text = Convert.ToString(currentTrack.user.username);
}
catch (Exception ex)
{
MessageDialog showMessgae = new MessageDialog("Something went wrong. Please try again. Error Details : " + ex.Message);
await showMessgae.ShowAsync();
}
}
После перехода от NowPlaying->Me->NowPlaying и нажатия кнопки «Далее» дорожка изменится, но пользовательский интерфейс не обновится, как показано на экране ниже:
проблема пользовательского интерфейса
Я пытаюсь воспроизвести проблему на простом примере, но безуспешно. Что может вызвать эту проблему? Любая помощь приветствуется.