Столбец ComboBox сетки данных WPF:Распространение списка со списком заголовков по всему столбцу
-
19-09-2019 - |
Вопрос
Привет всем!Вот мой вопрос:
У меня есть Datagrid в WPF, и у меня есть первый столбец, который является DataGridComboBoxColumn .
Что я хотел бы сделать, так это иметь заголовок для этого столбца также со списком:изменение заголовка с помощью функции распространения по всему столбцу.
Я могу сделать это визуально, но когда я отправляю данные, список, связанный с Datagrid, не содержит новых значений 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>
В ComboBox_SelectionChanged у меня есть следующий код:
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;
}
Когда я отправляю данные, я отправляю список DataContext в Datagrid;если я изменю значение первого столбца, адресуя строку за раз, т.е.щелкая ячейку со списком в каждой строке, значения передаются в список в DataContext, однако, если я изменяю значение первого столбца по заголовку, этого не происходит.
Кто-нибудь может сказать мне, чего мне не хватает?Я предполагаю, что это способ, которым я влияю на каждую строку, но я пробовал SelectedValue, SelectedItem и SelectedIndex...все безрезультатно.
Заранее благодарю...
Решение
Я думаю, что, возможно, я разгадал эту загадку...или, по крайней мере, замаскировал это...
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);
}
}
Я попытался изменить только datacontext и надеялся, что двусторонняя привязка сработает, но это сработало только тогда, когда я сосредоточился на выпадающем списке каждой строки.Вот я и подумал:"почему не в обоих направлениях?" Как вы можете видеть, я изменяю как selecteditem каждого combobox'а, так и статус BIB каждого устройства (часть datacontext).Таким образом, я получаю желаемый эффект.
Однако я не думаю, что это решение является лучшим, и я все еще надеюсь, что есть способ, которым я могу сделать это, не будучи негодяем.
Любые предложения по-прежнему приветствуются!