ListView中的媒体文件在我点击其中任何一个时都不会运行

时间:2017-07-19 09:39:30

标签: c# xaml listview uwp

我在ListView中运行媒体文件时遇到了一些问题。 我把文件放在一个ObservableCollection中并用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>

自由班

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

任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

之前我遇到过同样的问题。我试着在下面尝试,而不是绞尽脑汁解决原因。

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

它对我有用。