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