2016-06-29 1 views
1

マイリストの表示項目が表示されません。実際には、ドキュメントライブラリのファイル名をリストビューに集めようとしています。ここでUWP-Listビューの内容が空になる

は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ファイルから読み取られますが、UIでは結果は見つかりませんでした。

答えて

2

問題は、観察可能なコレクションを「置き換える」ことです。割り当て_data = await Data.ItemsGrouped();をコンストラクタ(_data = new ObservableCollection<Class1>())に一度だけ作成してから再度割り当てないで、クリアしてデータで埋めてください。

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

また、ItemsGroupedメソッドは、観察可能なコレクションの代わりにリストを返します。

+0

観察可能なコレクションのAddRangeプロパティはありません... –

+0

foreachを実行します –

+0

これは機能しました。次に、アイテムをCollectionViewSourceにグループ化して、アルファベットでグループ化することができますか。これは:MyView.Source = await getItems(); onNavigatedToメソッドの内部にあります。ここで、getItems()にはforeachメソッドが含まれています。 –

関連する問題