0

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

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

现在我想让我的 WPF 应用程序检查一个值列表,将其与在线 XML 文档进行比较并检索列表中每个人的数据列表与查找的值匹配,当然还设置了模型的一些属性。

一个例子: - 寻找“Lewitt” - 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 文档中信息提供者类:

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

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

        persons= informationProvider.GetPeople(searchShowName);

我怎样才能解决这个问题?

4

2 回答 2

1

您需要将 GetPeople 设为静态:

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

或创建 informationProvider 类的实例:

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

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

于 2013-08-27T12:12:08.910 回答
1

人=信息提供者.GetPeople(searchShowName);

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

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

 public static List<Person> GetPeople(string searchstring)

然后直接从类名中调用它。

于 2013-08-27T12:14:44.593 回答