Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在公共属性中封装ListBox_C#_.net_Winforms_Properties_Mvp - Fatal编程技术网

C# 在公共属性中封装ListBox

C# 在公共属性中封装ListBox,c#,.net,winforms,properties,mvp,C#,.net,Winforms,Properties,Mvp,在MVP应用程序中,如果我想将列表框封装在公共属性中,以便通过接口向演示者公开该属性。我应该能够通过这个公共属性更新列表框中的项目。我试过几种方法来做到这一点 public BindingSource Permission { get { return lstGivenPermissions.DataSource; } // Casting error set { lstGivenPermissions.DataSource = value; }

在MVP应用程序中,如果我想将列表框封装在公共属性中,以便通过接口向演示者公开该属性。我应该能够通过这个公共属性更新列表框中的项目。我试过几种方法来做到这一点

    public BindingSource  Permission
    {
        get { return lstGivenPermissions.DataSource; } // Casting error
        set { lstGivenPermissions.DataSource = value; }
    }
我尝试了几种类型的属性,如IEnumereble、List等,但无论是setter还是geter都会显示强制转换错误

一个选项是为get和set设置单独的属性

在这种情况下,是否可以使用单个属性,或者使用两个属性是可以接受的解决方案


编辑:我使用的是MVP模式,我的要求是我的演示者通过界面与视图对话。因此,如果我希望我的一个演示者访问视图中的文本框之类的控制器,那么这些控制器应该封装在属性中。这样我就可以通过接口公开了。

这解决了我的问题

    public List<string>  GivenPermission
    {
        get { return lstGivenPermissions.Items.Cast<string>().ToList(); }
        set { lstGivenPermissions.DataSource = value; }
    }

为什么希望列表框可以通过公共属性进行更改?如果你这样做,你就破坏了封装。实际上,我想做的是,我的演示类需要访问/更新视图中列表框中的内容项。演示类通过接口与视图对话。因此,只有视图中的属性才能公开!您可以只查看数据源的类型,看看它是什么类型,看看它实际上不是BindingSource、IEnumerable或List。我知道这一点。我要问的是,如何解决这个问题?
    public List<string>  GivenPermission
    {
        get { return lstGivenPermissions.Items.Cast<string>().ToList(); }
        set { lstGivenPermissions.DataSource = value; }
    }