I have a problem binding List<List> to DataGrid columns in code-behind. Here is my list of lists:
private List<List<object>> matrix = new List<List<object>>()
{
new List<object>(){53, 2500, 3000, 3500, 4000, 4500, 5000},
new List<object>(){2500, 1, 0, 0, 0, 0, 0},
new List<object>(){3000, 0, 1, 0, 0, 0, 0},
new List<object>(){3500, 0, 0, 1, 0, 0, 0},
new List<object>(){4000, 0, 0, 0},
new List<object>(){4500, 0, 0, 0, 0, 1, 0},
new List<object>(){5000, 9, 7, 5, 4, 1, 1},
new List<object>(){1, 0, 0, 0, 0, 0, 0},
new List<object>(){2, 0, 0, 0, 0, 0, 0},
new List<object>(){0, 0, 0, 0, 0, 0, 0}
};
public List<List<object>> Matrix
{
get { return matrix; }
set
{
matrix = value;
OnPropertyChanged(nameof(Matrix));
}
I've done this in XAML like this:
<DataGrid ItemsSource="{Binding Matrix}" VerticalAlignment="Top" FontSize="14" x:Name="matrixDataGrid" Height="420" Width="630" MinRowHeight="20" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=[0], Mode=TwoWay}"/>
<DataGridTextColumn Binding="{Binding Path=[1], Mode=TwoWay}"/>
<DataGridTextColumn Binding="{Binding Path=[2], Mode=TwoWay}"/>
<DataGridTextColumn Binding="{Binding Path=[3], Mode=TwoWay}"/>
<DataGridTextColumn Binding="{Binding Path=[4], Mode=TwoWay}"/>
<DataGridTextColumn Binding="{Binding Path=[5], Mode=TwoWay}"/>
<DataGridTextColumn Binding="{Binding Path=[6], Mode=TwoWay}"/>
<DataGridTextColumn Binding="{Binding Path=[7], Mode=TwoWay}"/>
<DataGridTextColumn Binding="{Binding Path=[8], Mode=TwoWay}"/>
<DataGridTextColumn Binding="{Binding Path=[9], Mode=TwoWay}"/>
</DataGrid.Columns>
</DataGrid>
Nice thing about this is that there's no need for code behind or generating bindings programmatically.