Динамическое заполнение поля со списком DataGridComboBoxColumn (WPF, DataGrid)
В моем приложении WPF у меня есть DataGrid, который привязан к ObservableCollection.
<DataGrid x:Name="DataGridTeilnehmer" HorizontalAlignment="Left" VerticalAlignment="Top" CellEditEnding="DataGridTeilnehmer_CellEditEnding" AutoGenerateColumns="False" SelectionMode="Single">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Teilnehmer" CellEditingTemplate="{StaticResource TeilnehmerEditTemplate}" CellTemplate="{StaticResource TeilnehmerCellTemplate}" />
<DataGridComboBoxColumn Header="Pass" />
...
DataGridComboBoxColumn должен быть заполнен отдельными значениями для каждой строки. Значения зависят от записи первого столбца. Итак, я хотел бы установить данные в событии CellEditEnding следующим образом:
private void DataGridTeilnehmer_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
if (!commiting)
{
commiting = true;
DataGridTeilnehmer.CommitEdit(DataGridEditingUnit.Row, false);
commiting = false;
// check, whether it is the first column that has been edited
if (...)
// get the list<string> for the combobox depending on the edited content
// get the combobox of the current row and bind the calculated list<string> to it
}
}
}
Как я могу это сделать?
РЕДАКТИРОВАТЬ: пример того, что я пытаюсь достичь.
У меня есть список клиентов, у которых есть индивидуальные билеты. Когда в первом столбце выбран клиент, я хочу загрузить список заявок, который есть у этого клиента, и загрузить его в следующий столбец - столбец со списком.
Заранее спасибо,
Фрэнк
1 ответ
Если вы связали свою сетку данных с ObservableCollection и ваш объект реализует INotifyPropertyChanged, вы можете достичь того, что вам нужно, без использования события редактирования ячейки.
В вашей модели просто проверьте значение вашего первого столбца, а затем установите значения других столбцов:
private string _firstColumn;
public string FirstColumn
{
get { return _firstColumn; }
set {
_firstColumn = value;
if(value == ...)
//set other properties
...
//notify the change
OnPropertyChanged("FirstColumn"); }
}
когда ваша сетка данных потеряла фокус, все новые значения будут сообщены сетке данных