我认为我的问题相当微不足道,但我没有正确解决问题。我想在 MVP 模式中使用被动演示者。我目前的具体观点是 Excel 加载项,但我不希望这在将来限制我。
在这个视图中,我有一个 RibbonDropDown,我需要从模型中获取的项目,并通过演示者传递给视图。我还想要 Presenter 和 View 之间的接口,以便它们更松散耦合。
这个MVP 示例非常有用,但似乎我无法像他们在这里所做的那样将数据源绑定到他们的产品列表示例:
public IList<ProductItem> Products
{
set
{
this.uiProducts.DataSource = value;
this.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;
}
}
这是视图的界面:
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);
}
}
}
然后我在for循环中得到编译器错误:
无法在此上下文中使用属性或索引器“SympivotyRibbon.ServArr”,因为它缺少 get 访问器
我不知道如何将 getter 与 setter 一起放入,以便我可以填充控件。如果我取消注释上面的 get-part,我会得到一个 StackOverflow 异常,可能是因为它是循环的。
我认为答案应该很简单,我只是不知道如何。