Check how it's done in the \Magento\Sales\Block\Order\Items::_prepareLayout()
method.
You create item collection factory and use it as collection for building pager
/**
* @param \Magento\Framework\View\Element\Template\Context $context
* @param \Magento\Framework\Registry $registry
* @param array $data
* @param \Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory|null $itemCollectionFactory
*/
public function __construct(
\Magento\Framework\View\Element\Template\Context $context,
\Magento\Framework\Registry $registry,
array $data = [],
\Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory $itemCollectionFactory = null
) {
$this->_coreRegistry = $registry;
$this->itemCollectionFactory = $itemCollectionFactory ?: \Magento\Framework\App\ObjectManager::getInstance()
->get(\Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory::class);
parent::__construct($context, $data);
}
/**
* Init pager block and item collection with page size and current page number.
*
* @return $this
*/
protected function _prepareLayout()
{
$this->itemsPerPage = $this->_scopeConfig->getValue('sales/orders/items_per_page');
$this->itemCollection = $this->itemCollectionFactory->create();
$this->itemCollection->setOrderFilter($this->getOrder());
$this->itemCollection->filterByParent(null);
/** @var \Magento\Theme\Block\Html\Pager $pagerBlock */
$pagerBlock = $this->getChildBlock('sales_order_item_pager');
if ($pagerBlock) {
$pagerBlock->setLimit($this->itemsPerPage);
//here pager updates collection parameters
$pagerBlock->setCollection($this->itemCollection);
$pagerBlock->setAvailableLimit([$this->itemsPerPage]);
$pagerBlock->setShowAmounts($this->isPagerDisplayed());
}
return parent::_prepareLayout();
}