如何使用MVP(Model-View-Presenter)填充ComboBox和DataGridView。其实我有这样的事情:
View基类:
public interface IView
{
event EventHandler Initialize;
event EventHandler Load;
}
演示者基类:
public class Presenter<TView> where TView : class, IView
{
private TView view;
public TView View { get { return view; } private set { view = value; } }
public Presenter(TView view)
{
if (view == null)
throw new ArgumentNullException("view");
View = view;
View.Initialize += OnViewInitialize;
View.Load += OnViewLoad;
}
protected virtual void OnViewInitialize(object sender, EventArgs e) { }
protected virtual void OnViewLoad(object sender, EventArgs e) { }
}
具体观点:
public interface IAdministrarUsuariosView : IView
{
string NombreUsuarioABuscar {get; set;}
List<Perfil> ListaPerfiles {get; set;}
event EventHandler BuscarUsuarioPorNombre;
event EventHandler BuscarUsuarioPorPerfil;
}
我不知道如何填充ComboBox和Datagridview!
PD:感谢Josh提供了View和Presenter基类的代码(MVP Base Class)
谢谢!
答案 0 :(得分:2)
您需要创建一个属性,用于设置ComboBox和DropdownList的数据源。
只是给你一个例子(你需要改进这个代码,但它显示了你如何做到这一点)
在你看来:
//this is just a template to simulate a datasource item
public class TestItem
{
public int Id { get; set; }
public string Description { get; set; }
}
public interface IAdministrarUsuariosView : IView
{
string NombreUsuarioABuscar { get; set; }
// List<Perfil> ListaPerfiles { get; set; }
event EventHandler BuscarUsuarioPorNombre;
event EventHandler BuscarUsuarioPorPerfil;
List<TestItem> SetComboBox { set; }
List<TestItem> SetGridView { set; }
}
然后在具体视图中(使用IAdministrarUsuariosView的winform
public class YourView:IAdministrarUsuariosView
{
public string NombreUsuarioABuscar
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
public event EventHandler BuscarUsuarioPorNombre;
public event EventHandler BuscarUsuarioPorPerfil;
public List<TestItem> SetComboBox
{
set
{
ComboBox.DataSource = value;
//your need to specify value and text property
ComboBox.DataBind();
}
}
public List<TestItem> SetGridView
{
set
{
GridView.DataSource = value;
//your need to specify value and text property
GridView.DataBind();
}
}
}
然后您的演示者应如下所示:
public class YourPresenter:Presenter<IAdministrarUsuariosView>
{
public YourPresenter(IAdministrarUsuariosView view) : base(view)
{
}
protected override void OnViewLoad(object sender, EventArgs e)
{
List<TestItem> listResult = GetListItem();
this.View.SetComboBox = listResult;
this.View.SetGridView = listResult;
}
}