My XAML (Contains two Static Columns)
<DataGrid x:Name="grid" Grid.Row="1" AutoGenerateColumns="False" ItemsSource="
{Binding }">
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Binding="{Binding Id}"/>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
</DataGrid.Columns>
</DataGrid>
Code Behind for Datagrid Collection.
ObservableCollection<Users> list = new ObservableCollection<Users>();
class Users
{
public int Id { get; set; }
public string Name { get; set; }
}
Adding columns at runtime from Code Behind
private void AddColumnsAtRuntime()
{
grid.Columns.Add(new DataGridTextColumn()
{
Header = "Address",
Binding = new Binding("Address")
});
}
Populating Collection
private void AddRow()
{
list.Add(new Users()
{
Id = 1,
Name = "John"
});
}
What i want is - How can i add Values to both static and dynamic columns, static columns will contain some Style trigger
Instead of binding to an ObservableCollection<Users>
, you could bind to the DataView
of a DataTable
to which you can add columns dynamically:
DataTable dataTable = new DataTable();
dataTable.Columns.Add(new DataColumn("Id"));
dataTable.Columns.Add(new DataColumn("Name"));
list = dataTable.DefaultView;
...
list.Table.Rows.Add(1, "John");
...
list.Table.Columns.Add(new DataColumn("Address"));
list.Table.Rows[dataTable.Rows.Count - 1]["Address"] = "address...";
The XAML is exactly the same as before:
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Binding="{Binding Id}"/>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
</DataGrid.Columns>