Calling a copy constructor in Presenter to prepare a list of Models I'm new to MVP. In a presenter I have following code. Here what am I trying is to create a list of Model objects (in this case IAttendance objects) and to show them on a DataGridView in the View.

Every time an attendance is entered on the View, AddAttendanceObjectToGrid() method on the presenter will be called to add the new attendance to the list. So to add a new Attendance model to the list I'm using a copy constructor in my Model. 

Now this code runs giving the desired output but I feel this could be further improved to get the best of MVP. 

class AttendancePresenter : BasePresenter
{
    private IAttendance _Model;
    private readonly IAttendanceView _View;

    BindingSource BS = new BindingSource();
    List&lt;IAttendance&gt; AttendanceList = new List&lt;IAttendance&gt;();

    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
        IAttendance attendanceModel = new Attendance(_Model); // Use copy constructor to get a new copy of model
        AttendanceList.Add(attendanceModel); // Add new model to list
        BS.DataSource = AttendanceList; // Show list on the grid
        _View.AttendanceInGrid = BS;
    }
}


MY MODEL

class Attendance : IAttendance
    {
        public string PointID { get; set; }
        public string PointName { get; set; }
        public int EmployeeID { get; set; }
        public string EmployeeName { get; set; }
        public DateTime InTime { get; set; }
        public DateTime OutTime { get; set; }
        public string ShiftType { get; set; }

        public Attendance() // Default constructor
        {
        }

        public Attendance(IAttendance attendance) //Copy constructor
        {
            PointID = attendance.PointID;
            PointName = attendance.PointName;
            EmployeeID = attendance.EmployeeID;
            EmployeeName = attendance.EmployeeName;
            InTime = attendance.InTime;
            OutTime = attendance.OutTime;
            ShiftType = attendance.ShiftType;

        }
    }
At first glance, there seems to be something off in the structure.

You wish to display a list of IAttendance objects on the screen. To me, this means that the Model is a list of IAttendance objects but the code shows only a single IAttendance instance being passed into the constructor.  How do you get more than one item into the presenter?

It has been a long while since I used MVX under WinForms, so some of what I remember may be off, but I would have a Model consisting of a list of IAttendance objects (not a single object) and just add them to a BindingList.  There should be no need to copy the objects. (If you want to edit them, make them implement IEditableObject).

Bottom Line 
There should be no need to copy the objects just to show them in a list.
If you want the screen to display a list of objects then the Model should consist of a list of objects, not a single one 
If you want to edit the objects, implementing IEditableObject is a better path than copying/saving and restoring on cancel.