__proxyChildModelValueChanged(ev) {
      // We need to redispatch the model-value-changed event on 'this', so it will
      // align with FormControl.__repropagateChildrenValues method. Also, this makes
      // it act like a portal, in case the listbox is put in a modal overlay on body level.
      if (ev.stopPropagation) {
        ev.stopPropagation();
      }
      this.__onChildCheckedChanged(ev);

      // don't send this.modelValue as oldValue, since it will take modelValue getter which takes it from child elements, which is already the updated value
      this.requestUpdate('modelValue', this._oldModelValue);
      // only send model-value-changed if the event is caused by one of its children
      if (ev.detail && ev.detail.formPath) {
        this.dispatchEvent(
          new CustomEvent('model-value-changed', {
            detail: /** @type {ModelValueEventDetails} */ ({
              formPath: ev.detail.formPath,
              isTriggeredByUser: ev.detail.isTriggeredByUser || this._isHandlingUserInput,
              element: ev.target,
            }),
          }),
        );
      }
      this._oldModelValue = this.modelValue;
    }
@param {CustomEvent & { target: LionOption; }} ev
@private