WPF DataGrid ComboBox Coluna: Propagando o cabeçalho ComboBox em toda a coluna
-
19-09-2019 - |
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...
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!