Domanda

Hey there! Ecco la mia domanda:

Ho un DataGrid in WPF e ho una prima colonna che è un DataGridComboBoxColumn.

Quello che mi piacerebbe fare è di avere un colpo di testa per quella colonna anche con una casella combinata:. Alterare l'intestazione con propagare in tutta la colonna

Posso ottenere questo fatto visivamente, ma quando inviare i dati, la lista che è legato con il DataGrid non portare i nuovi valori 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>

Nel ComboBox_SelectionChanged ho il seguente codice:

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;
        }

Quando ho inviare i dati, a mio avviso la lista che è DataContext al DataGrid; se cambio il valore della prima colonna affrontare una riga alla volta, cioè clic sulla cella con la casella combinata in ogni riga, i valori vengono propagati all'elenco in DataContext, se cambio il valore della prima colonna dall'intestazione non è così.

Qualcuno può dirmi che cosa mi manca? Sto indovinando che è il mio modo di influenzare ogni fila, ma ho provato SelectedValue, SelectedItem e SelectedIndex ... tutto l'inutilmente.

Grazie in anticipo ...

È stato utile?

Soluzione

Credo di aver risolto ... o almeno mascherato è ...

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);
            }
        }

Ho provato a cambiare solo il DataContext e di speranza per il legame a due vie per lavorare, ma lo ha fatto solo quando mi sono concentrato su combobox di ogni riga. Così ho pensato: "perchè non in entrambi i modi?" Come potete vedere, io cambio sia SelectedItem di ogni casella combinata e lo stato BIB di ogni dispositivo (la parte DataContext). In questo modo ottengo l'effetto desiderato.

Comunque non credo che questa soluzione è la migliore e sto ancora sperando ci sia un modo per fare questo, senza essere un mascalzone.

Tutti i suggerimenti sono ancora benvenuti!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top