带有“加载更多”选项的ListBox

时间:2011-08-15 09:06:05

标签: silverlight windows-phone-7 listbox

我想知道如何构建WP7中的ListBox,它一次只能加载20个项目,并且如果有的话,页脚会显示“加载更多”。

当用户按下“加载更多”时,它会在列表中加载另外20个而不加载以前加载的数据吗?

我在幕后使用LINQ。

我的XMAL代码如下:

<Grid>
  <ListBox name="newsIndexListBoxEN">
    <ListBoxItem>
      <DataTemplate>
        <StackPanel Width="410" Orientation="Horizontal" VerticalAlignment="Top" Margin="0,5,0,5">
          <StackPanel Background="DarkBlue" Margin="10,0,0,0" Height="100" Width="100" VerticalAlignment="Top">
            <TextBlock Name="columnsTypeTB" Text="{Binding pType}" Margin="0,0,0,0" Foreground="White" FontSize="23" HorizontalAlignment="Center" />
            <Image Width="100" Height="100" VerticalAlignment="Top" HorizontalAlignment="Center" Source="Background.png" />
          </StackPanel>
          <StackPanel Width="300" Height="100" Margin="0,0,0,0">
            <Path Margin="0,0,0,0" Data="M39,8 L389,8" Fill="DarkBlue" Height="1" Stretch="Fill" Stroke="DarkBlue" UseLayoutRounding="False" Width="400"/>
            <TextBlock Margin="8,0,0,0" Text="{Binding pTitle}" Tag="{Binding pID}" Style="{StaticResource PhoneTextNormalStyle}" TextWrapping="Wrap" Width="292" Height="66" />
            <TextBlock Margin="8,5,0,0" Text="{Binding pDate}" Tag="{Binding pID}" MouseEnter="NewsViewContent_mouseEnter" Style="{StaticResource PhoneTextSmallStyle}" VerticalAlignment="Bottom" TextWrapping="Wrap" Width="292" />
          </StackPanel>
        </StackPanel>
      </DataTemplate>
    </ListBoxItem>
  </ListBox>
</Grid>

C#代码如下:

using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication())
{
    using (IsolatedStorageFileStream fs = storage.OpenFile(fileName, FileMode.Open))
    {
        XDocument menuIndex = XDocument.Load(fs);

        var menuIndexList = from query in menuIndex.Descendants("news")
                            orderby (int)query.Element("newsID") descending
                            select new mkmenu
                                   {                                                
                                       pID = query.Element("newsID").Value,
                                       pTitle = query.Element("newsTitle").Value,
                                       pDate = query.Element("newspDate").Value,
                                       pType = newsType
                                   };

        newsIndexListBoxEN = menuIndexList.Count();
    }
}

任何想法?示例代码?

2 个答案:

答案 0 :(得分:4)

您可以编辑列表框模板,以在列表末尾显示“加载更多”按钮。在Blend中,右键单击列表框,选择“编辑模板”,“编辑副本”。默认情况下,列表框中包含如下模板:

ScrollViewer
    ItemPresenter

将ItemPresenter包装到StackPanel中,然后在结尾处添加一个按钮:

ScrollViewer
    StackPanel
        ItemPresenter
        Button

该按钮将始终显示在列表框的末尾。处理该按钮的Clicked事件,将项目添加到ObservableCollection。

答案 1 :(得分:2)

您可以bind your listboxObservableCollection并在页面(app)加载上添加前20个项目。按下“加载更多”之后获取下一个20项并添加到集合中。项目将自动添加到列表框中。