2016-06-29 3 views
1

Мой список Элементы списка не отображаются. Фактически я пытаюсь собрать имена файлов библиотеки документов в свой список.UWP-List View Content Empty

Вот Xaml:

<ListView x:Name="Mylist" SelectionMode="Single" ShowsScrollingPlaceholders="True" 
       Grid.ColumnSpan="2" ItemsSource="{x:Bind data}" > 

     <ListView.ItemTemplate> 
      <DataTemplate x:DataType="dat:Class1"> 
       <StackPanel> 
        <TextBlock Text="{Binding Key}" Style="{StaticResource TitleTextBlockStyle}"/> 
       </StackPanel> 
      </DataTemplate> 
     </ListView.ItemTemplate> 

Class1 Файл:

namespace App1{ 
public class Class1:List<object> 
{ 
    public Class1() 
    { 
    } 
    public string Items { get; set; } 
    public object Key { get; set; } 
}} 

Mainpagexaml.cs

 public ObservableCollection<Class1> _data; 
    public ObservableCollection<Class1> data { get { return _data; } } 

    public MainPage() 
    { 
     this.InitializeComponent(); 

    } 
    protected async override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     base.OnNavigatedTo(e); 
     _data = await Data.ItemsGrouped(); 
    } 

Data.cs

public async static Task<ObservableCollection<Class1>> generatename() 

    { 
     ObservableCollection<Class1> newdata = new ObservableCollection<Class1>(); 
     //var myfiles = await getfiles(); 
     StorageFolder folder = await KnownFolders.GetFolderForUserAsync(null, KnownFolderId.DocumentsLibrary); 
     List<string> filetypefilter = new List<string>(); 
     filetypefilter.Add(".mp3"); 

     QueryOptions query = new QueryOptions(CommonFileQuery.OrderBySearchRank, filetypefilter); 
     StorageFileQueryResult queryresult = folder.CreateFileQueryWithOptions(query); 
     IReadOnlyList<StorageFile> files = await queryresult.GetFilesAsync(); 
     foreach (var file in files) 
     { 
      newdata.Add(new Class1() { Items = file.Name }); 
      var f = file.Name; 
     } 
     return newdata; 

    } 
    public async static Task<ObservableCollection<Class1>> ItemsGrouped() 
    { 

     ObservableCollection<Class1> cgroup = new ObservableCollection<Class1>(); 
     var x = await generatename(); 
     var query = from item in x 
        group item by item.Items[0] into g 
        orderby g.Key 
        select new { GroupName = g.Key, Items = g }; 


     foreach (var item in query) 
     { 
      Class1 c1 = new Class1(); 
      c1.Key = item.GroupName; 
      foreach (var item2 in item.Items) 
      { 
       c1.Add(item2); 
       c1.Items = item2.Items; 
      } 
      cgroup.Add(c1); 
     } 
     return cgroup; 
    } 

Я обнаружил, что имена файлов считываются из файла data.cs, ​​но никакого результата в пользовательском интерфейсе нет.

ответ

2

Проблема: вы "заменяете" свою наблюдаемую коллекцию. Вместо выполнения задания _data = await Data.ItemsGrouped(); создайте его только один раз в конструкторе (_data = new ObservableCollection<Class1>()), а затем никогда не назначайте его снова, просто очистите его и заполните его данными.

_data.Clear(); 
_data.AddRange(await Data.ItemsGrouped()); 

сделать также метод ItemsGrouped возвращает список вместо наблюдаемой коллекции.

+0

Не существует свойства AddRange для наблюдаемой коллекции ... –

+0

Итак, сделайте foreach –

+0

Это сработало. Теперь вы можете помочь мне сгруппировать мои объекты в CollectionViewSource, чтобы я мог группировать их по алфавиту. Я пробовал this: MyView.Source = ожидание getItems(); -внутри метода onNavigatedTo, где getItems() содержит метод foreach. –