C# MVP,努力填充视图';具有接口属性的s RibbonDropDown

C# MVP,努力填充视图';具有接口属性的s RibbonDropDown,c#,mvp,ribbon-control,C#,Mvp,Ribbon Control,我认为我的问题相当琐碎,但我没有把问题弄对。我想在MVP模式中使用被动演示者。我目前的具体视图是一个Excel加载项,但我不希望这限制我将来的工作 在这个视图中,我有一个RibbonDropDown,即我需要从模型中获取的项目,并通过Presenter传递给视图。我还希望演示者和视图之间有一个接口,以便它们之间的耦合更加松散 这非常有用,但我似乎无法像他们在这里所做的那样将数据源绑定到他们的产品列表示例: public IList<ProductItem> Products {

我认为我的问题相当琐碎,但我没有把问题弄对。我想在MVP模式中使用被动演示者。我目前的具体视图是一个Excel加载项,但我不希望这限制我将来的工作

在这个视图中,我有一个RibbonDropDown,即我需要从模型中获取的项目,并通过Presenter传递给视图。我还希望演示者和视图之间有一个接口,以便它们之间的耦合更加松散

这非常有用,但我似乎无法像他们在这里所做的那样将数据源绑定到他们的产品列表示例:

 public IList<ProductItem> Products
{
    set
    {
        this.uiProducts.DataSource = value;
        this.uiProducts.DataBind();
    }
}
公共IList产品
{
设置
{
this.uiProducts.DataSource=值;
此文件为.uiProducts.DataBind();
}
}
因此,如果这是我的演示者:

public class Presenter 
{
    private IViewInterface iView;

    public Presenter(IViewInterface pView)
    {
        iView = pView;
    }

    public void Initialize()
    {
        
        List<String> ServArr = new List<String>();
        ServArr.Add("a server 1");
        ServArr.Add("a server 2");
        iView.ServArr = ServArr;     
    }

}
公共类演示者
{
私人iView界面iView;
公共演示者(IVieInterface pView)
{
iView=pView;
}
公共无效初始化()
{
List ServArr=新列表();
服务添加(“服务器1”);
服务添加(“服务器2”);
iView.ServArr=ServArr;
}
}
这是视图的界面:

public interface IViewInterface
{
    List<String> ServArr { get; set; }
}
public partial class SympivotyRibbon : IViewInterface
{

    private Presenter presenter;
   
    public List<String> ServArr
    {
        set { ServArr = new List<String>(value); }
        //get { return ServArr; }
    }

    private void SympivotyRibbon_Load(object sender, RibbonUIEventArgs e)
    {

        presenter = new Presenter(this);
        presenter.Initialize();

       for (int i = 0; i < ServArr.Count; i++)
       {
           RibbonDropDownItem item = Globals.Factory.GetRibbonFactory().CreateRibbonDropDownItem();
           item.Label = ServArr[i];
           dropDownServer.Items.Add(item);
       }

    }
    
}
公共接口IViewInterface
{
列表ServArr{get;set;}
}
这是该视图的一个片段:

public interface IViewInterface
{
    List<String> ServArr { get; set; }
}
public partial class SympivotyRibbon : IViewInterface
{

    private Presenter presenter;
   
    public List<String> ServArr
    {
        set { ServArr = new List<String>(value); }
        //get { return ServArr; }
    }

    private void SympivotyRibbon_Load(object sender, RibbonUIEventArgs e)
    {

        presenter = new Presenter(this);
        presenter.Initialize();

       for (int i = 0; i < ServArr.Count; i++)
       {
           RibbonDropDownItem item = Globals.Factory.GetRibbonFactory().CreateRibbonDropDownItem();
           item.Label = ServArr[i];
           dropDownServer.Items.Add(item);
       }

    }
    
}
public分部类sympivotyribon:IViewInterface
{
私人演讲者;
公共列表服务
{
set{ServArr=新列表(值);}
//获取{return ServArr;}
}
私有void SympivotyRibbon_Load(对象发送方,RibbonUIEventArgs e)
{
演示者=新演示者(此);
Initialize();
for(int i=0;i
然后我在for循环中得到编译器错误:

属性或索引器“SympivotyRibbon.ServArr”无法在此上下文中使用,因为它缺少get访问器

我不知道如何将getter和setter放在一起,以便填充控件。如果我取消注释上面的get部分,我会得到一个StackOverflow异常,可能是因为它是循环的

我想答案应该很简单,我只是不知道怎么做