MVC Winforms c# nullreferenceexception
本文关键字:nullreferenceexception Winforms MVC | 更新日期: 2023-09-27 17:49:21
我是一个试图在c# winforms中学习mvc的nooby,但我似乎无法理解为什么我的实例在我身上变成null。
视图形式
public partial class Form1 : Form, ISingleTagProperties
{
.....
PropController _propController;
public void SetController(PropController controller)
{
_propController = controller;
}
.....
private void dataGridView3_CurrentCellChanged(object sender, EventArgs e)
{
_propController.updateProperites(dgv);
}
编辑:调用updateProperties是什么给我null引用。
控制器PropController类
public class PropController
{
SingleTagProperties _view;
//constructor
public PropController(SingleTagProperties view)
{
_view = view;
view.SetController(this);
}
......
查看实例ISingleTagProperties
public interface ISingleTagProperties
{
void SetController(PropController controller);
string TagName { get; set; }
string TagDescription { get; set; }
.....
SetController触发,_propController不为空,但在表单中进一步尝试调用PropController类的方法,给出一个NullReferenceException,表示_propController为空。
我可能遗漏了一些基本的理解,但我似乎找不出来。
事件顺序必须为:
- 创建表单。
- …
- 创建视图,将窗体作为构造函数参数传入,该参数设置_propController。
当您创建表单时,所有其他控件也可能被创建(通常通过构造函数调用工具为您生成的部分类中的方法)。
这实际上是上面的第3步,我怀疑初始化这些控件的过程正在触发该事件。因为这发生在步骤2之前,所以没有设置_propController。
您可能想要放入空检查或其他解决方案,尽管从视图中引用控制器似乎会破坏您想要实现的MVC分离。
你用错工具了…
如果你想学习MVC,使用ASP.NET MVC
(Model View Controller)
,如果你想学习适合桌面/移动应用程序开发的设计模式,从WPF
开始学习MVVM
(Model View ViewModel)
。
这里有一个很好的资源,你可以学习:
PluralSight: ASP。. NET MVC 5 - Fundamentals