在WinRT中使用MVVMCross增量加载GridView

时间:2013-09-30 02:59:05

标签: windows-runtime mvvmcross

在使用WinRT时,我很难想出一种实现GridView增量加载的方法。

该文档仅指定了一种在WinRT中进行增量加载的方法 - 绑定到实现ISupportIncrementalLoading的集合。但是,此接口在可移植类库中不存在。

我想知道是否可以将视图模型保留在核心PCL中并仍然实现增量加载?

1 个答案:

答案 0 :(得分:1)

当pcl配置文件中不存在接口时,一种方法是将接口复制到pcl中,然后使用ValueConverter将接口包装并调整为其本机等效接口。

这适用于小型界面 - 它类似于MvvmCross将IValueConverter本身变为便携式界面。

所以,是的,可以在PCL中实现ViewModel,然后在本机UI中通过适配器使用非便携式接口。

但是,如果您需要编组/调整更大的对象,上述过程可能会有点繁琐 - 例如如果你需要编组ISupportIncrementalLoading,还需要其他界面,例如IEnumerableICollection等......

在这种情况下,将“ViewModel”移动到非PCL代码中可能更容易。

通常我会通过将集合放入非PCL代码来实现这一点 - 例如由:

  1. 声明可移植的IMyIncrementalCollectionFactoryIMyIncrementalCollection<T>接口,例如:

    public interface IMyIncrementalCollectionFactory
    {
        IMyIncrementalCollection<T> Create();
    }
    
    public interface IMyIncrementalCollection<T>
    {
        event EventHandler<RequireMore<T>> OnRequireMore;
        void SetHasMore(bool value);
    }
    
  2. 使用将IMyIncrementalCollection<T>次调用映射到LoadMoreItemsAsync<T>个事件

  3. 的集合类在WinRT中实现OnRequireMore
  4. 使用返回上述集合实例的类在WinRT中实现IMyIncrementalCollectionFactory

  5. 编写我的页面级ViewModel以使用IMyIncrementalCollectionFactory来创建集合。

  6. 同样的过程是我在共享代码中保持“加载更多”逻辑本身。