【问题标题】:Music Library List App - UWP / C#音乐库列表应用程序 - UWP / C#
【发布时间】:2016-05-24 16:10:01
【问题描述】:

我评论我正在用 C# 为 UWP 开发一个应用程序,我是新手,我愿意用他的专辑和艺术家显示歌曲列表,我已经在 ListView 中完成了(ListView.items .add) 将它们的属性加在一起,但这一点都不美观。 绑定是可能的?你能帮帮我吗?

 protected async override void OnNavigatedTo(NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);

        this.DataContext = this;


        StorageFolder storageFolder = KnownFolders.MusicLibrary;

        var files = await storageFolder.GetFilesAsync();


        foreach (var file in files)
        {
            var musicProperties = await file.Properties.GetMusicPropertiesAsync();

            var Artista = musicProperties.Artist;
            if (Artista == "")
            {
                Artista = "Artista desconocido";
            }
            string fileName = file.DisplayName;

            listView.Items.Add(file.DisplayName + "-" + Artista  );

        }


    }

【问题讨论】:

  • 对不起,哥们,但您可能想为您的问题尝试不同的翻译,因为不清楚您在问什么。
  • 我想做的是在 ListView 内的文本块中显示变量“文件名”
  • 好的,你得到了什么?

标签: c# windows xaml binding uwp


【解决方案1】:

可以绑定吗?

是的,绑定是可能的,我认为绑定是比在后面的代码中添加项目到ListView 更好的方法,您应该可以使用DataTemplate 来构建每个项目的结构并使用ObservableCollection Class 来在添加、删除或刷新项目时提供通知。

例如这里:

<ListView ItemsSource="{x:Bind MusicList}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="File Name: " />
                    <TextBlock Text="{Binding FileName}" />
                </StackPanel>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="Artist: " />
                    <TextBlock Text="{Binding Artist}" />
                </StackPanel>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="Album: " />
                    <TextBlock Text="{Binding Album}" />
                </StackPanel>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

您需要为这些“FileName”、“Artist”和“Album”属性创建一个数据模型类:

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

后面的代码:

private ObservableCollection<MusicLib> MusicList = new ObservableCollection<MusicLib>();

public MainPage()
{
    this.InitializeComponent();
}

protected override async void OnNavigatedTo(NavigationEventArgs e)
{
    StorageFolder musicLib = KnownFolders.MusicLibrary;
    var files = await musicLib.GetFilesAsync();
    foreach (var file in files)
    {
        var musicProperties = await file.Properties.GetMusicPropertiesAsync();
        var artist = musicProperties.Artist;
        if (artist == "")
            artist = "Artista desconocido";
        var album = musicProperties.Album;
        if (album == "")
            album = "Unkown";
        MusicList.Add(new MusicLib { FileName = file.DisplayName, Artist = artist, Album = album });
    }
}

我在这里使用你的方法将空的“艺术家”和“专辑”属性设置为某些值,但你也可以使用Converter来完成这项工作,关于使用Converter的信息,你可以参考IValueConverter interface,此文档中有示例。

顺便说一句,如果您想在您的应用中访问音乐库,您需要在您的“Package.appxmanifest”文件中启用“音乐库”功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多