2017-06-20 8 views
-1

私はxamlでListViewを持つUWPを持っています。ここでListView(UWP)のページ分割

私はJSONを受ける方法コード、XAMLで

public class TopPostsViewModel : INotifyPropertyChanged 
{ 
    private List<Child> postsList; 

    public List<Child> PostsList 
    { 
     get { return postsList; } 
     set { postsList = value; OnPropertyChanged(); } 
    } 

    public TopPostsViewModel() 
    { 
     Posts_download(); 
    } 


    public async void Posts_download() 
    { 
     string url = "https://www.reddit.com/top/.json?count=50"; 

     var json = await FetchAsync(url); 


     RootObject rootObjectData = JsonConvert.DeserializeObject<RootObject>(json); 
     PostsList = new List<Child>(rootObjectData.data.children); 


    } 
    private async Task<string> FetchAsync(string url) 
    { 
     string jsonString; 

     using (var httpClient = new System.Net.Http.HttpClient()) 
     { 
      var stream = await httpClient.GetStreamAsync(url); 
      StreamReader reader = new StreamReader(stream); 
      jsonString = reader.ReadToEnd(); 
     } 

     return jsonString; 
    } 
    public event PropertyChangedEventHandler PropertyChanged; 

    //[NotifyPropertyChangedInvocator] 
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

}

を一覧表示するように設定している私はこのようにそれを示しています。

<ListView x:Name="OrderList" ItemsSource="{Binding PostsList}"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <Grid x:Name="GridInf" Height="204" BorderBrush="#FFFBF8F8" BorderThickness="0,0,0,1"> 
        <Image x:Name="Image" HorizontalAlignment="Left" Height="200" Width="200" Tapped="Image_Tapped"> 
         <Image.Source> 
          <BitmapImage UriSource="{Binding data.thumbnail}" /> 
         </Image.Source> 
        </Image> 
        <TextBlock Text="{Binding data.title}" HorizontalAlignment="Left" Margin="252,10,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Height="134" Width="1028"/> 
        <TextBlock HorizontalAlignment="Left" Margin="252,139,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Height="97" Width="218"> 
         <Run Text="Comments: "/> 
         <Run Text="{Binding data.num_comments}"/> 
        </TextBlock> 
        <TextBlock HorizontalAlignment="Left" Margin="470,134,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Height="102" Width="312"/> 
        <TextBlock HorizontalAlignment="Left" Margin="787,139,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Height="97" Width="493"> 
         <Run Text="Author: "/> 
         <Run Text="{Binding data.author}"/> 
        </TextBlock> 
       </Grid> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 



</Grid> 

私はこのListViewコントロールをページ付けする必要があります - ページあたり10個の記事しか表示しない(今は私のリストに50個の投稿がある)

どうすればいいの?

+0

に大丈夫です。私はそれをチェックし、NuGet経由でインストールします。 これを使用するときは、ListBoxの項目を切り替えるだけです。この ページあたり10個のアイテムを表示する必要があります。最初の10秒から2番目に切り替える。どうすれば実現できますか?@JustinXL – Logan

+0

@Loganいつ次の10項目を表示しますか? –

+0

これで、List(50 items)の全アイテムを表示するようになりました。 デフォルトで10アイテムを表示する必要がありますが、ボタンのようにスムーズになり、xamlを新しい10アイテムなどに更新します。@VijayNirmal – Logan

答えて

1

を使用して、2つのリスト(一つは、すべてのアイテムのためのものであり、他の10個の項目を表示するためのものです)

private List<ItemSource> postsList = new List<ItemSource>(); //Given List 
private List<ItemSource> displayPostsList = new List<ItemSource>(); //List to be displayed in ListView 
int pageIndex = -1; 
int pageSize = 10; //Set the size of the page 

private void NextButton_Click(object sender, RoutedEventArgs e) 
{ 
    pageIndex++; 
    displayPostsList = postsList.Skip(pageIndex * pageSize).Take(pageSize).ToList(); 
} 

private void PreviousButton_Click(object sender, RoutedEventArgs e) 
{ 
    pageIndex--; 
    displayPostsList = postsList.Skip(pageIndex * pageSize).Take(pageSize).ToList(); 
} 

//Call NextButton_Click in page Constructor to show defalut 10 items 
NextButton_Click(null, null); 

ListViewItemsを更新(OR)でObservableCollectionを使用するためにINotifyPropertyChangedを使用することを忘れないでください。 Listの場所とthisの答えをListObservableCollection

+0

ありがとうございました。私にも1つの質問があります。これで私を助けることができますか? @ https:// stackoverflow.com/questions/44643498/convert-unix-timestamp-to-normal-date-uwp' – Logan

+0

@Loganこの回答が回答としてマークするのに役立つ場合 –

+6

これはそのようなハックであり、ページネーションの目的。 –