public function setValuePropertyName($valuePropertyName)
    {
        if (!is_string($valuePropertyName) || $valuePropertyName === '') {
            throw new InvalidArgumentException('"Value property name" argument must be a string and must not empty.');
        }

        if (!property_exists($this, $valuePropertyName)) {
            throw new InvalidArgumentException(sprintf('Property "%s" does not exist.', $valuePropertyName));
        }

        $this->valuePropertyName = $valuePropertyName;

        return $this;
    }