You can have something like this in your viewmodel:
class MainVM
{
public DataTable Entries { get; set; }
public MainVM() {
Entries = new DataTable() {
Columns = {
new DataColumn("DrHead", typeof(string)),
new DataColumn("CrHead", typeof(string)),
new DataColumn("DrAmount", typeof(int)),
new DataColumn("CrAmount", typeof(int)),
}
};
for (int i = 0; i < 5; i++)
Entries.Rows.Add("Dr", "Cr", 100, 200);
}
}
and these in xaml:
<Window x:Class="WPFTest.MainWindow"...>
<Window.DataContext>
<local:MainVM/>
</Window.DataContext>
<Grid>
<DataGrid ItemsSource="{Binding Entries}"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Dr Head" Binding="{Binding DrHead}"/>
<DataGridTextColumn Header="Cr Head" Binding="{Binding CrHead}"/>
<DataGridTextColumn Header="Dr Amount" Binding="{Binding DrAmount}"/>
<DataGridTextColumn Header="Cr Amount" Binding="{Binding CrAmount}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
and you'll get this:
No one uses this approach. Use List, ObservableCollection, etc. instead.
EDIT
---
With ObservableCollection/List, you simply do this:
class MainVM
{
public ObservableCollection<Entry> Entries { get; set; }
public MainVM() {
Entries = new ObservableCollection<Entry>();
for (int i = 0; i < 5; i++) {
Entries.Add(new Entry() {
DrHead = "Dr",
CrHead = "Cr",
DrAmount = 100,
CrAmount = 200
});
}
}
}
class Entry
{
public string DrHead { get; set; }
public string CrHead { get; set; }
public int DrAmount { get; set; }
public int CrAmount { get; set; }
}