Pergunta

Ei! Aqui está minha pergunta:

Eu tenho um datagrid no WPF e tenho uma primeira coluna que é um datagridcomboboxcolumn.

O que eu gostaria de fazer é ter um cabeçalho para essa coluna também com um ComboBox: alterando o cabeçalho com propagação ao longo da coluna.

Eu posso fazer isso visualmente, mas quando enviar os dados, a lista que está vinculada ao Datagrid não carrega os novos valores do 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>

No ComboBox_selectionChanged, tenho o seguinte 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;
        }

Quando envio os dados, envio a lista que é DataContext para o DataGrid; Se eu mudar o valor da primeira coluna que aborda uma linha de cada vez, ou seja, clicando na célula com o ComboBox em cada linha, os valores serão propagados para a lista no DataContext, no entanto, se eu alterar o valor da primeira coluna pelo cabeçalho isso não.

Alguém pode me dizer o que estou perdendo? Acho que é a maneira como eu afeto cada linha, mas tentei o SelectedValue, o SelectedItem e o SelectedIndex ... tudo sem sucesso.

Desde já, obrigado...

Foi útil?

Solução

Eu acho que posso ter resolvido ... ou pelo menos disfarçado ...

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

Tentei alterar apenas o DataContext e espero a ligação de mão dupla ao trabalho, mas só aconteceu quando me concentrei no ComboBox de cada linha. Então eu pensei: "Por que não nos dois lados?" Como você pode ver, eu altero tanto o status do BIB de cada dispositivo (a parte do datacontext). Dessa forma, recebo o efeito desejado.

No entanto, não acho que essa solução seja a melhor e ainda espero que haja uma maneira de fazer isso sem ser um patife.

Quaisquer sugestões ainda são bem -vindas!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top