2017-07-19 1 views
0

ListView内でメディアファイルを実行すると少し問題があります。 ファイルをObservableCollectionに入れてListViewでバインドしましたが、ListViewからファイルをクリックすると実行が開始されません。 何が間違っている可能性がありますか?ListView内のメディアファイルは、いずれかをクリックしても実行されません。

コード...

XAML

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="2*"/> 
     <RowDefinition Height="1*"/> 
    </Grid.RowDefinitions> 
    <ListView Name="filesListview" ItemsSource="{x:Bind FilesList}" SelectionChanged="filesListview_SelectionChanged"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <StackPanel> 
        <StackPanel Orientation="Horizontal"> 
         <TextBlock Text="{Binding FileName}" /> 
        </StackPanel> 
        <StackPanel Orientation="Horizontal"> 
         <TextBlock Text="{Binding Artist}" /> 
        </StackPanel> 
        <StackPanel Orientation="Horizontal"> 
         <TextBlock Text="{Binding Album}" /> 
        </StackPanel> 
        <StackPanel Orientation="Horizontal"> 
         <TextBlock Text="{Binding FileName}" /> 
        </StackPanel> 
       </StackPanel> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 
    <MediaPlayerElement x:Name="mediaElement" AutoPlay="True" AreTransportControlsEnabled="True" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="1"/> 
</Grid> 

Libのクラス

public class MusicLib 
{ 
    public string FileName { get; set; } 
    public string Artist { get; set; } 
    public string Album { get; set; } 
    public string FilePath { get; set; } 
} 

とは.cs

private ObservableCollection<MusicLib> FilesList = new ObservableCollection<MusicLib>(); 
    public AudioPlayer() 
    { 
     this.InitializeComponent(); 
    } 


    protected override async void OnNavigatedTo(NavigationEventArgs e) 
    { 
     StorageFolder musicLib = KnownFolders.MusicLibrary; 
     var files = await musicLib.GetFilesAsync(); 

     foreach (var file in files) 
     { 
      StorageItemThumbnail currentThumb = await file.GetThumbnailAsync(ThumbnailMode.MusicView, 200, ThumbnailOptions.UseCurrentScale); 
      var albumCover = new BitmapImage(); 
      albumCover.SetSource(currentThumb); 

      var fileProperties = await file.Properties.GetMusicPropertiesAsync(); 

      var fileName = fileProperties.Title; 

      var artist = fileProperties.Artist; 
      if (artist == "") { artist = "Unkonw"; }; 
      var album = fileProperties.Album; 
      if (album == "") { album = "Unkonw"; }; 
      FilesList.Add(new MusicLib 
      { 
       FileName = fileName, 
       Artist = artist, 
       Album = album, 
       FilePath = file.Path 
      }); 

     } 
    } 

    private void filesListview_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     ListView view = (ListView)sender; 

     MusicLib song = (MusicLib)view.SelectedItem; 
     string path = song.FilePath; 

     mediaElement.Source = MediaSource.CreateFromUri(new Uri(path)); 


     mediaElement.MediaPlayer.Play(); 
    } 

すべてのヘルプは高く評価されます。

答えて

0

私は前に同じ問題がありました。私の頭脳をなぜそれが起こっていたかについてラッキングするのではなく、私は以下で試した。

private async void filesListview_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    StorageFile file = await StorageFile.GetFileFromPathAsync(path); 
    mediaPlayer.Source = MediaSource.CreateFromStorageFile(file); 
    mediaPlayer.MediaPlayer.Play(); 
} 

それは私のために働く。

+1

ありがとう、それは働いた:) –

+0

"理由"を答えるには:UWPアプリは、パスを介してファイルにアクセスすることはできませんので、 'MediaSource.CreateFromUri(新しいUri(path))'行は動作しません。通常、 'CreateFromUri'はインターネットからのメディアファイルのストリーミングに使用されます。 –

関連する問題