【问题标题】:How can I make a paged ListView?如何制作分页 ListView?
【发布时间】:2012-08-07 16:27:40
【问题描述】:

我有一长串项目,我需要在 ListView 中显示它们。然后我需要页面使用计时器自动旋转。做什么?

【问题讨论】:

  • 是 Metro 还是 WPF?不能两者兼有。

标签: c# mvvm microsoft-metro


【解决方案1】:

(Windows 8 风格的 UI/Metro 应用)

在您的视图中:将 {Binding PagedItems} 添加到您的 ListView 的 ItemSource 属性中。

在您的视图模型中:

public class ViewModel : INotifyPropertyChanged {

    public ObservableCollection<Item> PagedItems {get;set;}
    private DispatcherTimer _timer;

    private ObservableCollection<Item> _itemsToPage;
    private int _itemsPerPage;
    private int _currentPage;

    public ViewModel() {
        _itemsToPage = new ObservableCollection<Item>(); // replace this with whatever your items are

        _timer = new DispatcherTimer {Interval = new TimeSpan(0,0,0,10)};
        _timer.Tick += NextPage;
        _timer.Start();
    }

    private void NextPage(object sender, object e) {
        if (_itemsToPage < _itemsPerPage) return;

        if (_currentPage * _itemsPerPage >= _itemsToPage) _currentPage = 1;
        else _currentPage++;

        // the key line
        PagedItems = new ObservableCollection<Item>(
            _itemsToPage.Skip((_currentPage-1) * _itemsPerPage)
                .Take(_itemsPerPage));

        OnPropertyChanged("PagedItems") // you need to implement INotifyPropertyChanged
    }
}

基本思想:每 x 秒根据您要分页的列表中的项目子集创建一个新列表。您会注意到(_currentPage-1) * _itemsPerPage 是每个页面上第一项的元素编号。

【讨论】:

  • 其实,回答你自己的问题is encouraged
  • @DanJ 当然,但我不知何故怀疑提出问题并立即发布答案是一种方法。无论如何,我离题了,问题似乎解决了。 :)
  • @Trustme-I'maDoctor - 单击提问按钮并注意底部的消息!我只是因为昨天花了一段时间才发帖,我认为这是一种很好的分享方式。
  • @Trustme-I'maDoctor - 单击提问按钮并注意底部的消息!我只是因为昨天花了一段时间才发帖,我认为这是一种很好的分享方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-05
  • 2013-05-15
  • 1970-01-01
相关资源
最近更新 更多