Articles in this section
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>

View sample in GitHub.

 

 

Did you find this information helpful?
Yes
No
Help us improve this page
Please provide feedback or comments
Comments (0)
Please sign in to leave a comment
Access denied
Access denied