在MVP演示者中,我有以下代码。我在这里尝试的是创建Model
个对象列表(在本例中为IAttendance
个对象),并在DataGridView
中的View
上显示它们。
每次在视图上输入出勤时,都会调用演示者上的AddAttendanceObjectToGrid()
方法将新的出勤添加到列表中。
class AttendancePresenter : BasePresenter
{
private IAttendance _Model;
private readonly IAttendanceView _View;
BindingSource BS = new BindingSource();
List<IAttendance> AttendanceList = new List<IAttendance>();
public AttendancePresenter( IAttendance model, IAttendanceView view )
{
_Model = model;
_View = view;
}
private void AddAttendanceObjectToGrid()
{
SetModelPropertiesFromView(_Model, _View); // Call base class method to update the Model with data
AttendanceList.Add(_Model); // Add new model to list
BS.DataSource = AttendanceList; // Show list on the grid
_View.AttendanceInGrid = BS;
}
}
每次我添加对模型的引用时,所有对象都在列表中相同。如何解决这个问题呢?
如果解决方案是在我的模型中使用复制构造函数,请告诉我如何?
答案 0 :(得分:0)
如果我正确理解了问题,您希望Grid显示新添加的对象。我看到两种方式
第二个选项会慢很多,因为它会触发清除Grid并按所有行重新填充它。
编辑: 该列表包含对同一对象的多个引用,我现在看到。您可以在将属性设置到其中之前克隆模型。
_Model = (IAttendance)_Model.Clone();
SetModelPropertiesFromView(_Model, _View);
AttendanceList.Add(_Model);
IAttendance应该实施ICloneable。