无法将数据从异步方法绑定到列表视图

时间:2019-06-21 08:53:21

标签: c# xaml uwp binding

一般来说,我是UWP和C#的新手。我正在尝试从我的视频库浏览文件,并将数据绑定到Listview控件。一切运行正常,我检查了所有变量,它们确实包含了正确的信息,但是列表视图中未填充任何内容。您能给我一个如何使其工作的提示吗?谢谢,如果我的代码不是最新技术,我要学习;)

这是我的主要班级:

namespace RedMedia
{
    public sealed partial class MainPage : Page
    {
        private readonly List<Video> Videos;
        public string resultat;
        int i;
        public MainPage()
        {  
            this.InitializeComponent();
            Videos = new List<Video>();
            InitVideos();
        }

        private async void  InitVideos()
        {
            var files = await KnownFolders.VideosLibrary.GetFilesAsync();
            foreach (var file in files)
            {
                if (file != null)
                {
                    var thumbnail = await file.GetThumbnailAsync(ThumbnailMode.VideosView, 50, ThumbnailOptions.ReturnOnlyIfCached);
                    Video video = new Video();
                    video.Title = file.Name;
                    if (thumbnail != null)
                    {
                        BitmapImage bitmapImage = new BitmapImage();
                        InMemoryRandomAccessStream randomAccessStream = new InMemoryRandomAccessStream();
                        await RandomAccessStream.CopyAsync(thumbnail, randomAccessStream);
                        randomAccessStream.Seek(0);
                        await bitmapImage.SetSourceAsync(randomAccessStream);
                                video.Cover = bitmapImage;
                    }

                    Videos.Add(video);
               }

这是我的课堂视频:

namespace RedMedia.Modeles
    {
        class Video : 
        {
            public BitmapImage Cover { get; set; }
            public uint Bitrate { get; set; }
            public List<string> Directors { get; set; }
            public List<string> Producers { get; set; }
            public TimeSpan Duration { get; set; }
            public uint Height { get; set; }
            public List<string> Keywords { get; set; }
            public uint Rating { get; set; }
            public string Subtitle { get; set; }
            public string Title { get; set; }
            public string Publisher { get; set; }
            public uint Year { get; set; }
            public string Path { get; set; }
            public string category { get; set; }

            public Video()
            {
                //some code to do
            }
        }

    }

最后是我的main.xaml

    <Page
        x:Class="RedMedia.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:Data="using:RedMedia.Modeles"
        mc:Ignorable="d" >

        <Page.Resources>
            <DataTemplate x:DataType="Data:Video" x:Key="VideoDataTemplate">
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
                    <TextBlock FontSize="16" Text="{x:Bind Title}" HorizontalAlignment="Center"/>
                </StackPanel>
            </DataTemplate>
        </Page.Resources>

        <Grid Background="Orange" Margin="0,20,20,0">
            <ListView  Name="lstview1" ItemsSource="{x:Bind Videos}"
                      ItemTemplate="{StaticResource VideoDataTemplate}">
            </ListView>
        </Grid>

    </Page>

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

首先,将所有课程公开。 然后,下一步,应按照以下步骤定义和实施您的视频收藏/列表:

public List<Video> Videos { get; set; }

注意:为了遵循MVVM或您使用的任何模式,我建议您重组代码,以便对视图模型使用绑定,而不是对代码进行隐藏。 在这种情况下,您还可以实现INotifyPropertyChanged并在定义VM属性时使用它。 然后,您的VM属性将如下所示:

private List<Video> _videos = new List<Video>();

public List<Video> Videos 
{
   get { return _videos; }
   set 
   {
      _videos = value; 
      OnPropertyChanged();
   }
}

如果您决定使用该链接,也许该链接可能会有所帮助:https://blogs.msdn.microsoft.com/msgulfcommunity/2013/03/13/understanding-the-basics-of-mvvm-design-pattern/

答案 1 :(得分:0)

感谢您的建议。我确实更改了解决方案以实现MVVM。尽管提供的链接非常有帮助。我终于找到了逐步的教程,可以帮助我理解机械病。对于像我这样感兴趣的初学者:https://hangzone.com/data-binding-uwp-part-1/ https://hangzone.com/data-binding-uwp-part-2/