我在用户界面中有DataGridView
,我的presentation
课程需要set
和get
来自gird
的数据。因此,我可以在这种情况下使用public property
,如下所示。
public DataGridView DeductionDetailsInGrid
{
get { return dgEmployeeDeductions; }
}
public List <Deduction > DeductionDetails
{
set { dgEmployeeDeductions.DataSource = value; }
}
我在这里使用两个属性,因为set属性应该能够在网格上显示由演示者传入的对象列表,并且演示者应该能够以某种方式从网格中获取数据为上层提供它们。
是否为同一个DataGridView
使用两个get和set属性作为可接受的解决方案?
我认为我应该将get
属性的数据类型(DataGridView
)更改为公开DataGridView
中断encapsulation
!怎么做?
EXTRA:
如果使用ListBoxes
我们可以做这样的事情......
public List<string> GivenPermission
{
get { return lstGivenPermissions.Items.Cast<string>().ToList(); }
set { lstGivenPermissions.DataSource = value; }
}
答案 0 :(得分:1)
正如您所说,将DataGridView
返回给演示者会破坏封装并将视图和演示者结合起来。演示者不应该知道视图用于可视化模型的控件。演示者只需将数据传递给视图。
按照你的二传手的例子。在getter中返回List<Deduction>
。您可以在getter中映射模型列表,然后返回到演示者
public List<Deduction> DeductionDetails
{
get
{
List<Deduction> deductionsList = new List<Deduction>();
foreach(var deductionFromGrid in dgEmployeeDeductions.Items)
{
Deduction deduction = new Deduction();
// map properties here
deductionsList.Add(deduction)
}
return deductionsList;
}
}
答案 1 :(得分:0)
public List <Deduction > DeductionDetails
{
get { return (List<Deduction>)dgEmployeeDeductions.DataSource; }
set { dgEmployeeDeductions.DataSource = value; }
}