Динамическое заполнение поля со списком 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"); }
}

когда ваша сетка данных потеряла фокус, все новые значения будут сообщены сетке данных

Другие вопросы по тегам