我使用WPF 4.0和数据网格在c#中创建了一些小应用程序。 我的datagrid绑定到“TableCompte”对象的某些数据成员
我想在输入一行后进行一些测试,所以,我使用RowEditEnding事件。
这是我的代码
private void dataGrid1_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
TableCompte Compte = e.Row.DataContext as TableCompte;
if (Compte != null)
{
// Verifs
}
}
我的问题是我的对象“ Compte ”为空。
尽管如此,我的“ DataContext ”价值还是不错的!所以这是一个演员错误,但我的错误在哪里?
这是我的XAML声明:
<DataGrid AutoGenerateColumns="false" Name="dataGrid1" AreRowDetailsFrozen="false" Margin="31,227,28,82" RowEditEnding="dataGrid1_RowEditEnding">
<DataGrid.Columns>
<DataGridTextColumn Width="134" Header="Compte d'origine" Binding="{Binding Path=m_CompteOrigine, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<DataGridTextColumn Width="134" Header="Compte Taux 1" Binding="{Binding Path=m_CompteTaux1, Mode=TwoWay ,UpdateSourceTrigger=PropertyChanged}" />
<DataGridTextColumn Width="134" Header="Taux 1" Binding="{Binding Path=m_Taux1, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged }" />
<DataGridTextColumn Width="134" Header="Compte Taux 2" Binding="{Binding Path=m_CompteTaux2, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
<DataGridTextColumn Width="134" Header="Taux 2" Binding="{Binding Path=m_Taux2, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged }" />
<DataGridTextColumn Width="134" Header="Compte Taux 3" Binding="{Binding Path=m_CompteTaux3, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
<DataGridTextColumn Width="134" Header="Taux 3" Binding="{Binding Path=m_Taux3, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged }" />
</DataGrid.Columns>
</DataGrid>
非常感谢:)
答案 0 :(得分:1)
e.Row.DataContext
包含该行的项源,而不是DataGrid的数据源。
所以它将是m_CompteOrigine
,m_CompteTaux1
,m_CompteTaux2
等所包含的内容。
它们都具有相同的类型或接口吗?
您应该转换为项目来源的公共类型/界面。
假设:
Compte m_CompteOrigine;
Compte m_CompteTaux1;
然后做:
private void dataGrid1_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
Compte Compte = e.Row.DataContext as Compte;
if (Compte != null)
{
// Verifs
}
}
如果您还有问题。尝试在赋值语句中调试并设置断点。然后使用调试器检查e.Row.DataContext
;它会告诉你它的类型。