【问题标题】:MVVM - Object ref not set to an instanceMVVM - 对象引用未设置为实例
【发布时间】:2013-08-27 20:14:44
【问题描述】:

我正在尝试将我创建的 WPF(不使用 MVVM 和 DataBinding)更改为使用这些强大功能的 WPF。

我已经建立了一个具有多个属性的 Person 模型(这里太长,无法列出),其中包含所有的 get 和 set,甚至 NotifyProtertyChanged 属性,例如 ID 和 Full Name 属性。

现在我想(通过单击按钮启动代码,以确保我在编写代码时知道它现在何时开始)让我的 WPF 应用程序检查值列表,将其与在线 XML记录并从中检索列表中与查找的值匹配的每个人的数据列表,当然还可以设置模型的一些属性。

一个例子: - 寻找“莱维特” - XML 文档有 4 个姓氏为 Lewitt 的人,因此它将这 4 个人添加到我的列表中(包括设置为我之前设置的 Person 模型类的项目)并设置每个项目的 ID 和 FullName 的值(缩写为示例)。

这是我目前在搜索某个值(称为搜索字符串)时实现的 informationProvider 类:

    public List<Person> GetPeople(string searchstring)
    {
        string url = string.Format("{0}{1}", BaseURL, HttpUtility.HtmlEncode(searchstring));
        XDocument doc = XDocument.Load(url);

        var names = (from s in doc.Root.Elements("Persons").Where(s => s.Element("Lastname").Value.Equals(searchstring, StringComparison.InvariantCultureIgnoreCase))
                     select new Person
                     {
                         ID = Convert.ToInt32(s.Element("id").Value),
                         fullName = s.Element("Firstname").Value + " " + s.Element("Lastname").Value
                     }).OrderBy(n => n.fullName).ToList();
        return people;
    }

我尝试通过单击按钮来为我的项目列表启动此过程(同样,仅用于测试目的) - 我设置了一个示例值“Jane Doe”,它确实存在于我们正在查找的 XML 文档中在 InformationProvider 类中:

            List<Person> persons= new List<Person>();
            persons= informationProvider.GetPeople(searchShowName);

我的问题是,当我启动代码并单击按钮进行测试时,它会引发错误,指出“对象引用未设置为对象的实例”。并突出显示我的台词

        persons= informationProvider.GetPeople(searchShowName);

我该如何解决这个问题?

【问题讨论】:

  • 你不能从调试中看到什么对象为空吗? @_@

标签: c# wpf data-binding mvvm


【解决方案1】:

persons= informationProvider.GetPeople(searchShowName);

这会引发错误,因为尚未实例化信息提供者。

通过查看您的 GetPeople 方法,可以肯定地说您可以像这样将其设为静态

 public static List<Person> GetPeople(string searchstring)

然后直接从类名中调用。

【讨论】:

  • 确实,我确实将 infoprovider 声明为“new InformationProvider();”很有用谢谢。那是愚蠢的。
【解决方案2】:

您需要将 GetPeople 设为静态:

class InformationProvider
{
    public static List<Person> GetPeople(string searchstring)
    {
        //...
    }
}

或者创建一个 informationProvider 类的实例:

InformationProvider informationProvider = new InformationProvider();
List<Person> persons = informationProvider.GetPeople(searchShowName);

请注意我是如何更改大小写的,并且没有创建多余的空列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多