How to get data from combobox from datagrid in WPF?

I was looking for a way to get data from this list, which I did. In particular, the selected value of each column from the columns. I am new to WPF and will be very grateful if someone helps.

thank

XAML:

<DataGrid x:Name="tb" Margin="5,51,5,5" ItemsSource="{Binding}"         AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
            <DataGridCheckBoxColumn Header="Include" Binding="{Binding Include}"/>
            <DataGridTemplateColumn Header="Measure" Width="*">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <ComboBox Margin="2" ItemsSource="{Binding Measure}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

WITH#:

ObservableCollection<State> items = new ObservableCollection<State>();
        foreach (string col in columns)
        {
            items.Add(new State()
            {
                Name = col,
                Include = true,
                Measure = new ObservableCollection<string>() { "Sum", "Average" }
            });
        }
        DataContext = items;

Image Columns:

+4
source share
1 answer

I think you're confused. I assume that you want your status elements to have the stringMeasure property , not their collection, but you want you to be able to select the Measure value from Combo with several options ...

If so, then you should override the Measure property as a single row, not a collection.

ObservableCollection<State> items = new ObservableCollection<State>();
    foreach (string col in columns)
    {
        items.Add(new State()
        {
            Name = col,
            Include = true,
            Measure = string.Empty  // Initialize it to whatever you want
        });
    }
    DataContext = items;

- DataContext DataContext, , XAML.

, , DataGrid ItemsSource SelectedItem Combos. ItemsSource, , , DataContext:

<DataGrid x:Name="tb" Margin="5,51,5,5" ItemsSource="{Binding}"
          AutoGenerateColumns="False">
    <DataGrid.Resources>
        <!-- This is where the values are defined -->
        <col:ArrayList x:Key="MeasureValues">
            <sys:String>Sum</sys:String>
            <sys:String>Average</sys:String>
        </col:ArrayList>
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
        <DataGridCheckBoxColumn Header="Include" Binding="{Binding Include}"/>
        <DataGridTemplateColumn Header="Measure" Width="*">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox Margin="2"
                              SelectedItem="{Binding Measure}"
                              ItemsSource="{StaticResource MeasureValues}" />
                              <!-- And this is where you consume those values -->
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

XAML, DataContext - ( RelativeSource, ElementName ..).

DataGridComboBoxColumn, :

<DataGrid x:Name="tb" Margin="5,51,5,5" ItemsSource="{Binding}"
          AutoGenerateColumns="False">
    <DataGrid.Resources>
        <!-- This is where the values are defined -->
        <col:ArrayList x:Key="MeasureValues">
            <sys:String>Sum</sys:String>
            <sys:String>Average</sys:String>
        </col:ArrayList>
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
        <DataGridCheckBoxColumn Header="Include" Binding="{Binding Include}"/>
        <DataGridComboBoxColumn Header="Measure" Width="*"
                                SelectedItemBinding="{Binding Measure}"
                                ItemsSource="{StaticResource MeasureValues}" />
                                <!-- And this is where you consume those values -->
    </DataGrid.Columns>
</DataGrid>
+2

All Articles