为同一对象使用两个get和set属性

时间:2014-06-09 17:14:17

标签: c# .net winforms properties mvp

我在用户界面中有DataGridView,我的presentation课程需要setget来自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; }
    }

2 个答案:

答案 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; }
}