在使用 WinRT 时,我正在努力寻找一种实现 GridView 增量加载的方法。
该文档仅指定了一种在 WinRT 中进行增量加载的方法 - 绑定到实现 ISupportIncrementalLoading 的集合。但是,可移植类库中不存在此接口。
我想知道是否可以将视图模型保留在核心 PCL 中并仍然实现增量加载?
在使用 WinRT 时,我正在努力寻找一种实现 GridView 增量加载的方法。
该文档仅指定了一种在 WinRT 中进行增量加载的方法 - 绑定到实现 ISupportIncrementalLoading 的集合。但是,可移植类库中不存在此接口。
我想知道是否可以将视图模型保留在核心 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);
}
使用将调用映射到事件IMyIncrementalCollection<T>
的集合类在 WinRT 中实现LoadMoreItemsAsync<T>
OnRequireMore
IMyIncrementalCollectionFactory
使用返回上述集合实例的类在 WinRT 中实现
编写我的页面级 ViewModel 以用于IMyIncrementalCollectionFactory
创建集合。
同样的过程将使我将“加载更多”逻辑本身保留在共享代码中。