ullevi83
ullevi83

Reputation: 199

Binding to DataGridComboBox

I know this has been asked a few times, but I cannot get the binding to work on my DataGridComboBox, it never displays at all. Can someone show me the error of my ways?

c#

IList<ServiceCodes> servicecodes = App.GetInfo.GetServiceCodes();
newinvoice.INVItemsDataGrid.DataContext = servicecodes;
newinvoice.ShowDialog();

XAML

<DataGrid x:Name="INVItemsDataGrid" DataContext="{Binding}">
    <DataGrid.Columns>
        <DataGridComboBoxColumn x:Name="INVSCDropDown" DisplayMemberPath="CodeName" SelectedValuePath="CodeName" SelectedValueBinding="{Binding CodeName}" />
    </DataGrid.Columns>
</DataGrid>

Thanks for your help as always.

Upvotes: 0

Views: 42

Answers (1)

mm8
mm8

Reputation: 169160

The first thing you need to do is to set the ItemsSource property of the DataGrid to an IEnumerable.

Once you have done this, you could bind the ComboBox to another or the same IEnumerable like this:

<DataGrid x:Name="INVItemsDataGrid" ItemsSource="{Binding}">
    <DataGrid.Columns>
        <DataGridComboBoxColumn x:Name="INVSCDropDown" DisplayMemberPath="CodeName" SelectedValuePath="CodeName" SelectedValueBinding="{Binding CodeName}">
            <DataGridComboBoxColumn.ElementStyle>
                <Style TargetType="{x:Type ComboBox}">
                    <Setter Property="ItemsSource" Value="{Binding Path=., RelativeSource={RelativeSource AncestorType=DataGrid}}" />
                </Style>
            </DataGridComboBoxColumn.ElementStyle>
            <DataGridComboBoxColumn.EditingElementStyle>
                <Style TargetType="{x:Type ComboBox}">
                    <Setter Property="ItemsSource" Value="{Binding Path=., RelativeSource={RelativeSource AncestorType=DataGrid}}" />
                </Style>
            </DataGridComboBoxColumn.EditingElementStyle>
        </DataGridComboBoxColumn>
    </DataGrid.Columns>
</DataGrid>

...although it doesn't make much sense to bind the ComboBox and the DataGrid to the same source collection. But you should at least get the idea.

Upvotes: 1

Related Questions