【发布时间】:2016-10-10 13:29:51
【问题描述】:
我正在尝试在我的 WinForms 项目中实现 MVP 模式。但是,从我的视图订阅我的 'ActivatedForm' 事件的 Presenter 中的方法 'Activate' 在我加载表单时似乎没有触发。我只是通过在“激活”方法中打印一些东西来测试它。为什么这不能正常工作?
我在下面发布了我的代码。
我认为这与我使用具体视图创建演示者这一事实有关,即使 _view 属性是接口类型“IHomeScreenView”。 我知道发生了“HomeScreenView_Activated”事件,因为我也在那里打印了一个打印件,并且有效。 'ActivatedForm' 事件总是在那里返回 null,这意味着没有订阅该事件。
IHomeScreenView.cs
public interface IHomeScreenView
{
List<string> ExistingAssessments { get; set; }
event EventHandler<EventArgs> ActivatedForm;
event EventHandler<EventArgs> CreatingNewAssessment;
event EventHandler<EventArgs> AddingNewStandard;
event EventHandler<EventArgs> OpeningAssessment;
}
HomeScreenView.cs
public partial class HomeScreenView : Form, IHomeScreenView
{
private HomeScreenPresenter homeScreenPresenter;
public List<string> ExistingAssessments
{
get { return recentAssessments.Items.Cast<string>().ToList(); }
set { recentAssessments.DataSource = value; }
}
public event EventHandler<EventArgs> ActivatedForm;
public event EventHandler<EventArgs> CreatingNewAssessment;
public event EventHandler<EventArgs> AddingNewStandard;
public event EventHandler<EventArgs> OpeningAssessment;
// Initialize homescreen.
public HomeScreenView()
{
InitializeComponent();
}
// Fires the activating form event.
private void HomeScreenView_Activated(object sender, EventArgs e)
{
ActivatedForm?.Invoke(this, EventArgs.Empty);
}
HomeScreenPresenter.cs
public class HomeScreenPresenter
{
private IHomeScreenView _view;
private AssessmentsModel _assessmentsModel;
public HomeScreenPresenter(IHomeScreenView view)
{
_assessmentsModel = new AssessmentsModel();
_view = view;
_view.ActivatedForm += Activate;
_view.CreatingNewAssessment += CreateNewAssessment;
_view.AddingNewStandard += AddNewStandard;
_view.OpeningAssessment += OpenAssessment;
}
public void Activate(object sender, EventArgs e)
{
Debug.Print("hi");
HashSet<string> items = new HashSet<string>(_assessmentsModel.GetDataList("Assessments", "assessment_name"));
List<string> assessments = items.ToList();
_view.ExistingAssessments = assessments;
}
希望有人能帮忙,谢谢。
【问题讨论】:
标签: c# winforms events design-patterns mvp