动态填充DataGridComboBoxColumn(WPF,DataGrid)的ComboBox

时间:2012-11-22 14:39:52

标签: wpf datagrid datagridcomboboxcolumn

在我的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 个答案:

答案 0 :(得分:0)

如果将datagrid绑定到ObservableCollection并且您的对象实现了INotifyPropertyChanged,则可以在不使用单元格editending事件的情况下实现所需。

在您的模型中,只需检查第一列的值,然后设置其他列值:

private string _firstColumn;
public string FirstColumn
{
    get { return _firstColumn; }
    set { 
         _firstColumn = value; 
         if(value == ...)
         //set other properties
         ...
         //notify the change
         OnPropertyChanged("FirstColumn"); }
}

当您的datagridrow失去焦点时,所有新值都会通知datagrid