WPF DataGrid ComboBox Colonna: moltiplicazione Intestazione Combobox tutto colonna
-
19-09-2019 - |
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 ...
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!