WPF DataGrid ComboBox Colonne: tête Combobox toute reproduction ou de multiplication colonne

StackOverflow https://stackoverflow.com/questions/1195471

Question

Hé là! Voici ma question:

J'ai un Datagrid en WPF et j'ai une première colonne qui est un DataGridComboBoxColumn.

Ce que je voudrais faire est d'avoir un en-tête de cette colonne aussi avec un combobox. Modifiant l'en-tête avec Propager dans toute la colonne

Je peux obtenir ce fait visuellement, mais lorsque je soumets les données, la liste qui est lié à la Datagrid ne porte pas les nouvelles valeurs combobox.

<dg:DataGridComboBoxColumn SelectedItemBinding="{Binding BIBStatus}"                                            
                           ItemsSource="{Binding Source={StaticResource typeStatus}}" 
                           Width="0.20*">
                    <dg:DataGridComboBoxColumn.HeaderTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <TextBlock Text="Built-In Bridge"/>
                                <ComboBox SelectedItem="{Binding BIBStatus}" 
                                          SelectionChanged="ComboBox_SelectionChanged"
                                          ItemsSource="{Binding Source={StaticResource typeStatus}}"/>
                            </StackPanel>                                
                        </DataTemplate>
                    </dg:DataGridComboBoxColumn.HeaderTemplate>
                </dg:DataGridComboBoxColumn>

Dans le ComboBox_SelectionChanged je le code suivant:

DataGridColumn comboCol = this.gridResults.Columns[0];

        for (int i = 0; i < this.gridResults.Items.Count; i++)
        {
            ComboBox myCmBox = (comboCol.GetCellContent(this.gridResults.Items[i]) as ComboBox);

            myCmBox.SelectedValue = ((ComboBox)sender).SelectedValue;
        }

Quand je soumets les données, je soumets la liste qui est DataContext à l'Datagrid; si je change la valeur de la première colonne d'adressage d'une rangée à la fois, soit en cliquant sur la cellule avec la liste déroulante dans chaque rangée, les valeurs sont reproduites à la liste de DataContext, si je change la valeur de la première colonne par l'en-tête il ne fonctionne pas.

Quelqu'un peut-il me dire ce que je suis absent? Je devine que c'est la façon dont j'affecte chaque ligne, mais je l'ai essayé SelectedValue, SelectedItem et SelectedIndex ... en vain.

Merci d'avance ...

Était-ce utile?

La solution

Je pense que je l'ai résolu ... ou au moins déguisée ...

DataGridColumn comboCol = this.gridResults.Columns[0];

        for (int i = 0; i < this.gridResults.Items.Count; i++)
        {
            ComboBox myCmBox = (comboCol.GetCellContent(this.gridResults.Items[i]) as ComboBox);
            myCmBox.SelectedItem = ((ComboBox)sender).SelectedItem;
        }

        if (this._results != null)
        {
            foreach (Device device in _results)
            {
                device.BIBStatus = (TypeStatus)Enum.ToObject(typeof(TypeStatus), ((ComboBox)sender).SelectedValue);
            }
        }

J'ai essayé de changer seulement le datacontext et d'espoir pour la liaison dans les deux sens au travail, mais il ne fait quand je me suis concentré sur le combobox de chaque ligne. Donc, je pensais: « pourquoi pas les deux sens? » Comme vous pouvez le voir, je change à la fois SelectedItem de chaque combobox et le statut BIB de chaque appareil (la partie datacontext). De cette façon, j'obtenir l'effet désiré.

Cependant, je ne pense pas que cette solution est la meilleure et j'espère toujours qu'il ya une manière que je peux le faire sans être un scélérat.

Toutes les suggestions sont toujours les bienvenus!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top