You may find this helpful; in our current report writer we do something like
report.RegBusinessObject(nameof(StatementViewModel));
await report.SaveAsync(storageFile);
This then creates a report definition file with the data source defined like this
<StatementViewModel Ref="2" type="Stimulsoft.Report.Dictionary.StiBusinessObject" isKey="true">
<Alias>StatementViewModel</Alias>
<BusinessObjects isList="true" count="2">
<Statements Ref="3" type="Stimulsoft.Report.Dictionary.StiBusinessObject" isKey="true">
<Alias>Statements</Alias>
<BusinessObjects isList="true" count="1">
<Orders Ref="4" type="Stimulsoft.Report.Dictionary.StiBusinessObject" isKey="true">
<Alias>Orders</Alias>
<BusinessObjects isList="true" count="0" />
<Category />
<Columns isList="true" count="32">
<value>OrderId,System.String</value>
<value>OrderNr,System.Int32</value>
<value>OrderStatus,System.String</value>
<value>DateDue,System.Nullable`1[System.DateTime]</value>
<value>DateEntered,System.DateTime</value>
<value>DateInvoiced,System.Nullable`1[System.DateTime]</value>
<value>ItemCode,System.String</value>
<value>ItemDescription,System.String</value>
<value>NrUnits,System.Int32</value>
<value>CustomerId,System.String</value>
<value>AddressLabel,System.String</value>
<value>FileAs,System.String</value>
<value>StaffCode,System.String</value>
<value>CompletedSMSResult,System.String</value>
<value>CompletedSMSSuccess,System.Boolean</value>
<value>CompletedSMSFailed,System.Boolean</value>
<value>Discount,System.Decimal</value>
<value>UnitPrice,System.Decimal</value>
<value>ItemTotal,System.Decimal</value>
<value>Net,System.Decimal</value>
<value>Tax,System.Decimal</value>
<value>Total,System.Decimal</value>
<value>TaxRate,System.Decimal</value>
<value>Paid,System.Decimal</value>
<value>Balance,System.Decimal</value>
<value>JobId,System.String</value>
<value>DateCollected,System.Nullable`1[System.DateTime]</value>
<value>DateCompleted,System.Nullable`1[System.DateTime]</value>
<value>LocationId,System.String</value>
<value>LocId,System.String</value>
<value>JobCount,System.Int32</value>
<value>IsSelected,System.Boolean</value>
</Columns>
<Dictionary isRef="1" />
<Guid>a4053a0c25154955a6ab900a58dc466c</Guid>
<Name>Orders</Name>
</Orders>
</BusinessObjects>
<Category />
<Columns isList="true" count="6">
<value>CustomerId,System.String</value>
<value>FileAs,System.String</value>
<value>AddressLabel,System.String</value>
<value>Days90,System.Decimal</value>
<value>Days60,System.Decimal</value>
<value>Days30,System.Decimal</value>
</Columns>
<Dictionary isRef="1" />
<Guid>a6a5adb8413340a28a2e56f3c8a6dad9</Guid>
<Name>Statements</Name>
</Statements>
<LetterheadImage Ref="5" type="Stimulsoft.Report.Dictionary.StiBusinessObject" isKey="true">
<Alias>LetterheadImage</Alias>
<BusinessObjects isList="true" count="1">
<Dispatcher Ref="6" type="Stimulsoft.Report.Dictionary.StiBusinessObject" isKey="true">
<Alias>Dispatcher</Alias>
<BusinessObjects isList="true" count="0" />
<Category />
<Columns isList="true" count="2">
<value>HasThreadAccess,System.Boolean</value>
<value>CurrentPriority,Windows.UI.Core.CoreDispatcherPriority</value>
</Columns>
<Dictionary isRef="1" />
<Guid>979f1616a4f144d8b086ca3a490d0e8d</Guid>
<Name>Dispatcher</Name>
</Dispatcher>
</BusinessObjects>
<Category />
<Columns isList="true" count="0" />
<Dictionary isRef="1" />
<Guid>cda88f745da7422fa156072ffeb74674</Guid>
<Name>LetterheadImage</Name>
</LetterheadImage>
</BusinessObjects>
<Category>StatementViewModel</Category>
<Columns isList="true" count="7">
<value>DateFrom,System.String</value>
<value>DateTo,System.String</value>
<value>Note,System.String</value>
<value>TaxName,System.String</value>
<value>TradingName,System.String</value>
<value>TradingDetails,System.String</value>
<value>HasLetterhead,System.Boolean</value>
</Columns>
<Dictionary isRef="1" />
<Guid>523644a99f61400ca251f6775be6fd4c</Guid>
<Name>StatementViewModel</Name>
</StatementViewModel>
There is no need for the developer to specify types, only the viewmodel need be specified and the report designer is able to read the types from the viewmodel.
The report definition can then be given to our design team for layout. They can see the viewmodel properties in the report designer where they can drag and drop properties onto the design surface.
That’s what we are hoping to be able to do with Flexreports.