C# 在另一个类中的属性更改后,如何调用方法?
我已经试着找出这个问题有一段时间了,我觉得我已经接近解决方案了,但是我遗漏了一些关键的信息。我希望这里有人能帮我指出正确的方向 我正在写一个程序来跟踪组件的重量和重心。我有四个主要的课程:C# 在另一个类中的属性更改后,如何调用方法?,c#,wpf,C#,Wpf,我已经试着找出这个问题有一段时间了,我觉得我已经接近解决方案了,但是我遗漏了一些关键的信息。我希望这里有人能帮我指出正确的方向 我正在写一个程序来跟踪组件的重量和重心。我有四个主要的课程: 基本零件:定义独立于位置(零件号、体积、密度、质量)的零件特性 DetailedPart:BasicPart的一个子类,也包含基于位置的信息(例如,CG位置) StdPartLibrary:只有一个属性(一个列表对象)和一些方法,用于将基本零件信息保存到文件或从文件中加载 MassModel:只有一个属性(列
结果证明我是个白痴。正如Steve Byrne在评论中指出的,我只需要运行代码来更新DataGrid的CurrentCellChanged事件中的质量属性。谢谢 以下是基本情况,
CellEditEnd
事件在保存在数据网格中的内容之间触发,用户尝试停止编辑单元格后,可以取消该事件以强制用户继续编辑,因此在事件结束之前不会提交(保存)更改
因此,您需要使用另一个事件,例如:CurrentCellChanged
,该事件将在单元格更改(提交/保存)后触发但不会告诉您更改了哪个单元格Scottlogic.com提供了下面的示例代码,以组合CurrentCellChanged
和CellEditEnd
来获取正在编辑的单元格,并在触发事件后触发:
private DataRowView rowBeingEdited = null;
private void dataGrid_CellEditEnding(object sender,
DataGridCellEditEndingEventArgs e)
{
DataRowView rowView = e.Row.Item as DataRowView;
rowBeingEdited = rowView;
}
private void dataGrid_CurrentCellChanged(object sender, EventArgs e)
{
if (rowBeingEdited != null)
{
rowBeingEdited.EndEdit();
}
}
最后,还有另一个更复杂的解决方案,即通过调用
grid.CommitEdit(DataGridEditingUnit.Row, true);
(完整教程,可以找到原始代码)
然后在数据已提交的情况下运行方法 以下是基本情况,
CellEditEnd
事件在保存在数据网格中的内容之间触发,用户尝试停止编辑单元格后,可以取消该事件以强制用户继续编辑,因此在事件结束之前不会提交(保存)更改
因此,您需要使用另一个事件,例如:CurrentCellChanged
,该事件将在单元格更改(提交/保存)后触发但不会告诉您更改了哪个单元格Scottlogic.com提供了下面的示例代码,以组合CurrentCellChanged
和CellEditEnd
来获取正在编辑的单元格,并在触发事件后触发:
private DataRowView rowBeingEdited = null;
private void dataGrid_CellEditEnding(object sender,
DataGridCellEditEndingEventArgs e)
{
DataRowView rowView = e.Row.Item as DataRowView;
rowBeingEdited = rowView;
}
private void dataGrid_CurrentCellChanged(object sender, EventArgs e)
{
if (rowBeingEdited != null)
{
rowBeingEdited.EndEdit();
}
}
最后,还有另一个更复杂的解决方案,即通过调用
grid.CommitEdit(DataGridEditingUnit.Row, true);
(完整教程,可以找到原始代码)
然后在数据已提交的情况下运行方法 你可以发布一些代码吗?这将更有助于理解问题,你的应用程序是使用mvvmso的吗?你可以这样做吗?如果有,请告诉我more@SteveByrne我先试过了。我在DataGrid上使用了CellEditEnding事件,但这似乎是在属性更改之前执行的。@Steve是DataGrid的项目源是
PartsList
,用户在网格中编辑一些东西,你需要更新该对象,对吗?@Steve,或者steve Byrne请发布您对此问题的解决方案,作为对该问题的回答。您可以发布一些代码吗?了解问题会更有帮助,您的应用程序是否使用MVVMO u wana请执行类似操作,如果有,请告诉我more@SteveByrne我先试过了。我在DataGrid上使用了CellEditEnding事件,但该事件似乎是在属性更改之前执行的。@Steve是DataGrid的项目源是PartsList
,用户在网格中编辑了一些东西,您需要更新该对象,对吗?@Steve或Steve Byrne请发布您对此的解决方案,作为此问题的答案。