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

Как я могу это сделать?

РЕДАКТИРОВАТЬ: пример того, чего я пытаюсь достичь.

У меня есть список клиентов, у каждого из которых есть отдельные билеты. Когда клиент был выбран в первом столбце, я хочу загрузить список билетов, который есть у этого клиента, и загрузить его в следующий столбец - столбец со списком.

Заранее спасибо,
Фрэнк


person Aaginor    schedule 22.11.2012    source источник


Ответы (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"); }
}

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

person michele    schedule 22.11.2012
comment
Но мне нужно, чтобы элементы попали в список со списком. Список со списком должен меняться динамически, и я понятия не имею, кто его устанавливает. - person Aaginor; 22.11.2012
comment
Извините @Aaginor, если я неправильно понимаю ваш вопрос, я удалю ответ, можете ли вы привести пример? - person michele; 22.11.2012