protected function setDataSource($dataSource)
    {
        if (is_array($dataSource) || $dataSource instanceof \Traversable) {
            foreach ($dataSource as $value) {
                $this->internalDataListData[] = $value;
            }
            return;
        }
        if (is_callable($dataSource)) {
            $this->internalDataListData = $dataSource;
            return;
        }
        throw new \InvalidArgumentException('The data argument must be iterable or a callback that returns such data.');
    }