Reputation: 1315
I've created a custom DataGrid which has columns of comboboxes defined in it. I tried to provide the itemsource value to the combobox but it doesn't populate data in comboboxes on runtime. Here's the C# and XAML code.
public MainWindow()
{
InitializeComponent();
datagrid_additionalinfo.Items.Add(new object());
datagrid_additionalinfo.DataContext = new ComboboxViewModel();
}
public class ComboboxViewModel
{
public List<string> Members { get; set; }
public List<string> Disciplines { get; set; }
public ComboboxViewModel()
{
this.Members = new List<string>
{
"Ali", "Mubashar", "Muffassir", "Nitin"
};
this.Disciplines = new List<string>
{
"Architecture", "Mechanical", "Structure"
};
}
}
<DataGrid Name="datagrid_additionalinfo" Margin="20,0,20,0" IsReadOnly="False" SelectionMode="Single" CanUserAddRows="True" AutoGenerateColumns="False" SelectionUnit="Cell" >
<DataGrid.Columns>
<DataGridTemplateColumn Header="Discipline" Width="100" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox Width="200" ItemsSource="{Binding Disciplines}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Members" Width="100">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox Width="200" ItemsSource="{Binding Members}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Please correct me if I'm missing something. Thank you very much.
Upvotes: 0
Views: 43
Reputation: 522
DataGrid columns should be placed inside the 'Columns' tag:
<DataGrid ...>
<DataGrid.Columns>
<DataGridTemplateColumn Header="Discipline" Width="100" >
...
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Members" Width="100">
...
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
And, if you prefer populate Items from code, you don't need use DataContext, just write:
public MainWindow()
{
InitializeComponent();
datagrid_additionalinfo.Items.Add(new ComboboxViewModel());
}
Edit:
If you prefer use DataContext, create a ViewModel that contains all items, for example:
public class MainViewModel
{
public List<ComboboxViewModel> Items { get; set; }
public MainViewModel()
{
Items = new List<ComboboxViewModel>() { new ComboboxViewModel()};
}
}
And then bind to it in xaml:
<DataGrid Name="datagrid_additionalinfo" ItemsSource="{Binding Items}" ...>
And setup DataContext:
public MainWindow()
{
InitializeComponent();
datagrid_additionalinfo.DataContext = new MainViewModel();
}
Upvotes: 1