C# 无法在WP 8.1中显示WrapGrid中的文件夹?

C# 无法在WP 8.1中显示WrapGrid中的文件夹?,c#,xaml,windows-runtime,winrt-xaml,windows-phone-8.1,C#,Xaml,Windows Runtime,Winrt Xaml,Windows Phone 8.1,我是WP 8.1的新成员。我正在尝试在WrapGrid中显示Windows Phone 8.1中的音乐文件夹。我可以访问这些文件夹,但无法在我构建的XAML设计中将它们显示为文件夹 这是我的XAML代码: <Button x:Name="dumybutton" Content="Click me to see Folders" Background="#FF6E5FCF" Click="dumyclick"/> <Grid x:Name="ShowFolders" Backgr

我是WP 8.1的新成员。我正在尝试在WrapGrid中显示Windows Phone 8.1中的音乐文件夹。我可以访问这些文件夹,但无法在我构建的XAML设计中将它们显示为文件夹

这是我的XAML代码:

<Button x:Name="dumybutton" Content="Click me to see Folders" Background="#FF6E5FCF" Click="dumyclick"/>
<Grid x:Name="ShowFolders" Background="#FFEA8282">
   <ScrollViewer>
      <ListView x:Name="ViewMusicFolders" Grid.Row="1" Grid.Column="2" VirtualizingStackPanel.VirtualizationMode="Recycling" SelectionMode="None" IsActiveView="True">                                    
         <ListView.ItemsPanel>
            <ItemsPanelTemplate>
               <WrapGrid Orientation="Horizontal" MaximumRowsOrColumns="2" />
            </ItemsPanelTemplate>
         </ListView.ItemsPanel>
      </ListView>
   </ScrollViewer>
</Grid>
private void dumyclick(object sender, TappedRoutedEventArgs e)
{
   ViewMusicFolders.Opacity = 1;
   GenerateFolders();
}

private async void GenerateFolders()
{
   try
   {
      // To get all music folders
      IReadOnlyList<IStorageItem> MusicFolders = await KnownFolders.MusicLibrary.GetFoldersAsync();                
      SeeFolders(MusicFolders);
   }
   catch {}
}

private async void SeeFolders(IReadOnlyList<IStorageItem> MusicFolderList)
{
   try
   {

      foreach(IStorageItem mItem in MusicFolderList)
      {
         IStorageItem item = mItem;
         int temp = 0;

         // Checks if the item is a Folder
         if(item.IsOfType(Windows.Storage.StorageItemTypes.Folder))
         {                       
            StorageFolder mFolder = (StorageFolder)item;

            // To get all Items (Files & Folders) present in the folder
            IReadOnlyList<IStorageItem> fileList = await mFolder.GetItemsAsync();

            // checks the count. If folder contains any files or sub-folders, fetch details & then traverse through the fileList.
            if(fileList.Count >0)
            {
               // create object of MusicAlbums() class.
               MusicF musicAlbumObj = new MusicF();

               // set name of item Folder.
               musicAlbumObj.strName = item.Name;

               // set path of item Folder.
               musicAlbumObj.strPath = item.Path;


               string showText = "";
               showText = musicAlbumObj.strName + " *** " + musicAlbumObj.strPath;
               MessageDialog msg = new MessageDialog(showText);
               await msg.ShowAsync(); 
            }                      
         }                 
      }
   }
   catch {}
}

例如,如果要显示文件夹名称和路径,应执行以下操作:

<Button x:Name="dumybutton" Content="Click me to see Folders" Background="#FF6E5FCF" Click="dumyclick"/>
<Grid x:Name="ShowFolders" Background="#FFEA8282">
   <ScrollViewer>
      <ListView x:Name="ViewMusicFolders" Grid.Row="1" Grid.Column="2" VirtualizingStackPanel.VirtualizationMode="Recycling" SelectionMode="None" IsActiveView="True">                                    
         <ListView.ItemsPanel>
            <ItemsPanelTemplate>
               <WrapGrid Orientation="Horizontal" MaximumRowsOrColumns="2" />
            </ItemsPanelTemplate>
         </ListView.ItemsPanel>
         <ListView.ItemTemplate>
            <DataTemplate>
               <StackPanel>
                 <TextBlock Text="{Binding strName}" />
                 <TextBlock Text="{Binding strPath}" />
               </StackPanel>
            </DataTemplate>
         </ListView.ItemTemplate>
      </ListView>
   </ScrollViewer>
</Grid>
在xaml中,更改为以下内容:

<Button x:Name="dumybutton" Content="Click me to see Folders" Background="#FF6E5FCF" Click="dumyclick"/>
<Grid x:Name="ShowFolders" Background="#FFEA8282">
   <ScrollViewer>
      <ListView x:Name="ViewMusicFolders" Grid.Row="1" Grid.Column="2" VirtualizingStackPanel.VirtualizationMode="Recycling" SelectionMode="None" IsActiveView="True">                                    
         <ListView.ItemsPanel>
            <ItemsPanelTemplate>
               <WrapGrid Orientation="Horizontal" MaximumRowsOrColumns="2" />
            </ItemsPanelTemplate>
         </ListView.ItemsPanel>
         <ListView.ItemTemplate>
            <DataTemplate>
               <StackPanel>
                 <TextBlock Text="{Binding strName}" />
                 <TextBlock Text="{Binding strPath}" />
               </StackPanel>
            </DataTemplate>
         </ListView.ItemTemplate>
      </ListView>
   </ScrollViewer>
</Grid>

并尝试在xaml.cs中应用以下更改

private async void SeeFolders(IReadOnlyList<IStorageItem> MusicFolderList)
{

   List<MusicF> foldersList = new List<MusicF>();

   try
   {

      foreach(IStorageItem mItem in MusicFolderList)
      {
         IStorageItem item = mItem;
         int temp = 0;

         // Checks if the item is a Folder
         if(item.IsOfType(Windows.Storage.StorageItemTypes.Folder))
         {                       
            StorageFolder mFolder = (StorageFolder)item;

            // To get all Items (Files & Folders) present in the folder
            IReadOnlyList<IStorageItem> fileList = await mFolder.GetItemsAsync();

            // checks the count. If folder contains any files or sub-folders, fetch details & then traverse through the fileList.
            if(fileList.Count >0)
            {
               // create object of MusicAlbums() class.
               MusicF musicAlbumObj = new MusicAlbums();

               // set name of item Folder.
               musicAlbumObj.strName = item.Name;

               // set path of item Folder.
               musicAlbumObj.strPath = item.Path;

               foldersList.Add(musicAlbumObj);


               string showText = "";
               showText = musicAlbumObj.strName + " *** " + musicAlbumObj.strPath;
               MessageDialog msg = new MessageDialog(showText);
               await msg.ShowAsync(); 
            }                      
         }                 
      }

      ViewMusicFolders.ItemsSource = foldersList;

   }
   catch {}
}
private async void see文件夹(IReadOnlyList MusicFolderList)
{
List foldersList=新列表();
尝试
{
foreach(音乐文件夹列表中的IStorageItem mItem)
{
IStorageItem=mItem;
内部温度=0;
//检查项目是否为文件夹
if(item.IsOfType(Windows.Storage.StorageItemTypes.Folder))
{                       
StorageFolder mFolder=(StorageFolder)项;
//获取文件夹中的所有项目(文件和文件夹)
IReadOnlyList fileList=wait mFolder.GetItemsAsync();
//检查计数。如果文件夹包含任何文件或子文件夹,请获取详细信息,然后遍历文件列表。
如果(fileList.Count>0)
{
//创建MusicAlbums()类的对象。
MusicF musicAlbumObj=新的MusicAlbums();
//设置项目文件夹的名称。
musicAlbumObj.strName=item.Name;
//设置项目文件夹的路径。
musicAlbumObj.strPath=item.Path;
foldersList.Add(musicAlbumObj);
字符串showText=“”;
showText=musicAlbumObj.strName+“***”+musicAlbumObj.strPath;
MessageDialog msg=新建MessageDialog(showText);
等待msg.ShowAsync();
}                      
}                 
}
ViewMusicFolders.ItemsSource=文件夹列表;
}
捕获{}
}

我添加的代码片段是将代码隐藏文件夹列表链接到xaml.cs时丢失的代码片段。我希望这能解决问题。

@WD您能确认foreach结束时foldersList对象是否有项吗?