0

我用 WPF 4.0 和一个数据网格在 c# 中创建了一个小应用程序。我的数据网格绑定到“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>

非常感谢 :)

4

1 回答 1

1

e.Row.DataContext包含行的项目源,而不是 DataGrid 的数据源。

所以它将是 , , 等所m_CompteOrigine包含m_CompteTaux1m_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;它会告诉你它的类型。

祝你好运

于 2012-09-03T08:46:36.083 回答