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为空。

我可能遗漏了一些基本的理解,但我似乎找不出来。

MVC Winforms c# nullreferenceexception

事件顺序必须为:

  1. 创建表单。
  2. 创建视图,将窗体作为构造函数参数传入,该参数设置_propController。

当您创建表单时,所有其他控件也可能被创建(通常通过构造函数调用工具为您生成的部分类中的方法)。

这实际上是上面的第3步,我怀疑初始化这些控件的过程正在触发该事件。因为这发生在步骤2之前,所以没有设置_propController。

您可能想要放入空检查或其他解决方案,尽管从视图中引用控制器似乎会破坏您想要实现的MVC分离。

你用错工具了…

如果你想学习MVC,使用ASP.NET MVC (Model View Controller),如果你想学习适合桌面/移动应用程序开发的设计模式,从WPF开始学习MVVM (Model View ViewModel)

这里有一个很好的资源,你可以学习:

PluralSight: ASP。. NET MVC 5 - Fundamentals