Category / Section
How to load the collection in GridComboBoxColumn when defining DataContext after loading Window in WPF DataGrid (SfDataGrid)?
1 min read
The GridComboBoxColumn will loads the collection when defining DataContext before loading the WPF DataGrid (SfDataGrid). When you are defining the DataContext in Window.Loaded event, the binding will not be updated for GridComboBoxColumn which loads the empty collection. But you can achieve this by using Freezable class like below code example.
C#
this.Loaded += MainWindow_Loaded; void MainWindow_Loaded(object sender, RoutedEventArgs e) { this.DataContext = new ViewModel(); } public class BindingProxy : Freezable { protected override Freezable CreateInstanceCore() { return new BindingProxy(); } //Dependency property Data for holding ComboBox ItemsSource value. public object Data { get { return (object)GetValue(DataProperty); } set { SetValue(DataProperty, value); } } public static readonly DependencyProperty DataProperty = DependencyProperty.Register("Data", typeof(object), typeof(BindingProxy), new UIPropertyMetadata(null)); }
XAML
<Window.Resources> <local:BindingProxy x:Key="proxy" Data="{Binding}" /> </Window.Resources> <syncfusion:SfDataGrid x:Name="DataGrid" AutoGenerateColumns="False" ItemsSource="{Binding Orderlist}" NavigationMode="Cell"> <syncfusion:SfDataGrid.Columns> <syncfusion:GridTextColumn MappingName="Name" /> <syncfusion:GridTextColumn MappingName="City" /> <syncfusion:GridTextColumn MappingName="Country" /> <syncfusion:GridComboBoxColumn AllowEditing="True" DisplayBinding="{Binding Path=SelectedName}" DisplayMemberPath="Name" HeaderText="ComboBox-Column" ItemsSource="{Binding Data.StringName, Source={StaticResource proxy}}" /> </syncfusion:SfDataGrid.Columns> </syncfusion:SfDataGrid>