在两个 PivotItem 上使用相同的 ListView 而无需代码重复

Using the same ListView on two PivotItems without code duplication

我正在开发购物 Windows Phone 8.1 应用程序,其中有一个 "Promotions" 页面。此页面是一个包含两个 PivotItem 的 Pivot 页面。第一个 Item 显示前 100 个促销,第二个 Item 显示所有促销。为了获取数据,我调用了一个网络服务。两种情况下的数据具有相同的结构,因此我在两个页面上使用相同的 ListView 和 DataTemplate。我的问题是:在这种情况下如何避免代码重复?如何在不复制粘贴 XAML 和代码的情况下在两个 PivotItems 上使用相同的 ListView 和 DataTemplate?

您需要在视图模型中创建另一个 属性,它采用第一个过滤器,如下所示:

    public ObservableCollection<ItemModel> ItemList { get; set; }
    public IEnumerable<ItemModel> Top100List { get { return (from i in ItemList select i).Take(100); } }

然后将每个 ListView 绑定到适当的 属性。此示例假定前 100 个项目是列表中的前 100 个项目。如果不是,那么您要么必须修改 linq 语句,要么在添加项目时对列表进行排序。