在我的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
}
}
}
我该怎么做?
编辑:我想要实现的一个例子。
我有客户名单,每个客户都有个人票。当在第一列中选择客户时,我想加载该客户拥有的故障单列表并将其加载到下一列 - 组合框列中。
提前致谢,
弗兰克
答案 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