Pregunta

Hola! Aquí está mi pregunta:

Tengo una cuadrícula de datos en WPF y tengo una primera columna que es un DataGridComboBoxColumn.

Lo que me gustaría hacer es tener un encabezado de esa columna también con un cuadro combinado:. Alteración de la cabecera con propagan a lo largo de la columna

Puedo hacer esto visualmente, pero cuando envío de los datos, la lista que se enlaza con el DataGrid no llevar a los nuevos valores de cuadro combinado.

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

En el ComboBox_SelectionChanged tengo el siguiente código:

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

Cuando envío de los datos, presento la lista que es DataContext a la cuadrícula de datos; si cambio el valor de la primera columna de hacer frente a una fila a la vez, es decir, hacer clic en la celda con el cuadro combinado en cada fila, los valores se propagan a la lista en DataContext, sin embargo si cambio el valor de la primera columna por la cabecera no lo hace.

Puede alguien decirme lo que me falta? Yo supongo que es la forma en que afectan a cada fila, pero he intentado SelectedValue, SelectedItem y SelectedIndex ... todo en vano.

Gracias de antemano ...

¿Fue útil?

Solución

Yo creo que puede haber resuelto ... o al menos disfrazada que ...

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

He intentado cambiar sólo el DataContext y esperanza para la unión de dos vías para trabajar, pero sólo hice cuando me he centrado en cuadro combinado de cada fila. Así que pensé: "¿por qué no las dos cosas?" Como se puede ver, yo cambio tanto SelectedItem de cada cuadro combinado y el estado de cada dispositivo BIB (la parte DataContext). De esta manera puedo obtener el efecto deseado.

Sin embargo no creo que esta solución es la mejor y todavía estoy esperando que hay alguna manera de hacer esto sin ser un sinvergüenza.

Cualquier sugerencia es bienvenida todavía!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top