我正在努力提供一种在使用 WinRT 时实现 GridView 增量加载的方法。
该文档仅指定一种在 WinRT 中执行增量加载的方法 - 绑定到实现 ISupportIncrementalLoad 的集合。但是,可移植类库中不存在此接口。
我想知道是否可以将视图模型保留在核心 PCL 中并仍然实现增量加载?
当 pcl 配置文件中不存在接口时,一种方法是将接口复制到 pcl 中,然后使用 ValueConverter 将接口包装并调整为其本机等效项。
这适用于小型接口 - 它类似于MvvmCross将IValueConverter
自身转换为可移植接口的方式。
因此,是的,可以在 PCL 中实现 ViewModel,然后本机 UI 可以通过适配器使用非可移植接口。
但是,如果您需要编组/适应更大的对象,则上述过程可能有点乏味 - 例如,如果您需要编组ISupportIncrementalLoading
,以及IEnumerable
、ICollection
等其他接口......
在这种情况下,将该"ViewModel"移动到非PCL代码中可能更容易。
通常,我会通过将集合放入非 PCL 代码来做到这一点 - 例如:
-
声明可移植
IMyIncrementalCollectionFactory
和IMyIncrementalCollection<T>
接口如下所示:public interface IMyIncrementalCollectionFactory { IMyIncrementalCollection<T> Create(); } public interface IMyIncrementalCollection<T> { event EventHandler<RequireMore<T>> OnRequireMore; void SetHasMore(bool value); }
-
使用将
LoadMoreItemsAsync<T>
调用映射到OnRequireMore
事件的集合类在 WinRT 中实现IMyIncrementalCollection<T>
-
使用返回上述集合实例的类在 WinRT 中实现
IMyIncrementalCollectionFactory
-
编写我的页面级视图模型以使用
IMyIncrementalCollectionFactory
创建集合。
同样的过程将使我将"加载更多"逻辑本身保留在共享代码中。