public GraphModelType(
            string title,
            string subTitle,

            Encoding xEncoding,
            Encoding yEncoding,

            int numLines,

            Prepare <INPUT, PREPARED> prepare,

            GetLineLabel getLineLabel,

            GetNumXFromInputAndPrepared <INPUT, PREPARED> getNumX,
            GetXFromInputAndPrepared <INPUT, PREPARED> getX,
            GetYFromInputAndPrepared <INPUT, PREPARED> getY
            )
        {
            this.Title    = title;
            this.SubTitle = subTitle;

            this.DataPointFormat = new DataPointFormat(xEncoding, yEncoding);

            this.NumLines = numLines;

            this.prepare = prepare;

            this.getLineLabel = getLineLabel;

            this.getNumX = getNumX;
            this.getX    = getX;
            this.getY    = getY;
        }
        public SingleLineInstanceGraphModelTypeWithPrepared(
            string title,
            string subTitle,
            Encoding xEncoding,
            Encoding yEncoding,
            Prepare <IEnumerable <INSTANCE>, PREPARED> prepare,
            GetXFromInstance <INSTANCE> getX,
            GetYFromInputAndPrepared <IEnumerable <INSTANCE>, PREPARED> getY)

            : base(
                title,
                subTitle,
                xEncoding,
                yEncoding,
                1,
                prepare,
                null,
                (input, prepared) => input.Count(),
                (input, prepared, line, index) => getX.Invoke(input.ElementAt(index)),
                getY)
        {
        }