You'll need some way to tell the Grid how many Rows/Columns it has. Perhaps as each Item loads you could check the value of RowIndex
and ColumnIndex
and add Rows/Columns to the Grid if needed.
As another alternative, perhaps you can expose RowCount
and ColumnCount
properties in your ViewModel that return the max RowIndex
and ColumnIndex
, and in the Grid's Loaded event add however many Columns/Rows you need.
I find it perfectly acceptable to use code-behind in MVVM IF the code is related to the UI only.
Another idea would be to arrange your items in your code-behind into a 2D grid before returning it to the View, and then bind that Grid to a DataGrid with AutoGenerateColumns=True
and the headers removed
Update
My current solution to this problem is to use a set of AttachedProperties
for a Grid
that allow you to bind RowCount
and ColumnCount
properties to a property on the ViewModel
You can find the code for my version of the attached properties on my blog here, and they can be used like this:
<ItemsPanelTemplate>
<Grid local:GridHelpers.RowCount="{Binding RowCount}"
local:GridHelpers.ColumnCount="{Binding ColumnCount}" />
</ItemsPanelTemplate>
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…