WPF Datagrid Contains Combox and edit it DataGridTemplateColumn
XAML,Here I used DataGridTemplateColumn instead of DataGridComboxColumn,When I want to edit the combox,its itemssource must binded as Static data source, modified by static key word.
<DataGrid SelectionMode="Single" IsReadOnly="False" AutoGenerateColumns="False" ItemsSource="{Binding UsersList,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"> <DataGrid.Columns> <DataGridTemplateColumn Header="Nation" > <DataGridTemplateColumn.CellEditingTemplate> <DataTemplate> <ComboBox ItemsSource="{Binding Source={x:Static local:MainWindow.NationsList}}" SelectedIndex="0"/> </DataTemplate> </DataGridTemplateColumn.CellEditingTemplate> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding Nation,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridCheckBoxColumn Header="CanEnglish" IsThreeState="False" Binding="{Binding CanEnglish,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> <DataGridTextColumn Header="Name" Binding="{Binding Name,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> </DataGrid.Columns> </DataGrid>
.cs
public partial class MainWindow : Window { public static List<string> NationsList { get; set; } public List<User> UsersList { get; set; } static MainWindow() { NationsList = new List<string> { "USA", "UK", "JAPAN" }; } public MainWindow() { InitializeComponent(); this.DataContext = this; InitDataSource(); var temp = NationsList; } private void InitDataSource() { UsersList = new List<User>(); UsersList.Add(new User() { Nation = NationsList[0], Name = "Fred1", CanEnglish = true }); UsersList.Add(new User() { Nation = NationsList[1], Name = "Fred2", CanEnglish = true }); UsersList.Add(new User() { Nation = NationsList[2], Name = "Fred3", CanEnglish = true }); } } public class User { public string Nation { get; set; } public string Name { get; set; } public bool CanEnglish { get; set; } }
<DataGrid SelectionMode="Single" IsReadOnly="False" AutoGenerateColumns="False" ItemsSource="{Binding UsersList,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"> <DataGrid.Columns> <DataGridTemplateColumn Header="Nation" > <DataGridTemplateColumn.CellEditingTemplate> <DataTemplate> <ComboBox ItemsSource="{Binding Source={x:Static local:MainWindow.NationsList}}" SelectedIndex="0"/> </DataTemplate> </DataGridTemplateColumn.CellEditingTemplate> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding Nation,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridCheckBoxColumn Header="CanEnglish" IsThreeState="False" Binding="{Binding CanEnglish,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> <DataGridTextColumn Header="Name" Binding="{Binding Name,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> </DataGrid.Columns> </DataGrid>