2013-08-27 32 views
0

我試圖改變一個WPF我創建的對象參考(不使用MVVM和數據綁定)到一個WPF是不使用這些宏偉的功能。MVVM - 未設置爲一個實例

我已經設置了一個人物模型,其中包含所有獲取和設置的多個屬性(太長而不能在此列出),甚至是NotifyProtertyChanged屬性(如ID和全名屬性)。

現在我想(通過單擊按鈕啓動代碼,以確保在編寫代碼時知道它何時啓動)讓我的WPF應用程序通過值列表,將其與在線XML文檔,並從列表中找出匹配查找值的列表中的每個人的數據列表,當然還會設置模型的某些屬性。

一個例子: - 尋找「勒維特」 - XML文件有4人的姓·勒維特所以它增加了這4人到我的清單(包括項目設置爲我已成立前的人物模型類)並設置每個項目的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; 
    } 

我嘗試推出這一過程中爲我的項目,如列表(再次,僅用於測試目的) - 我已經設置「李四」的一個例子值不會在我們在InformationProvider類看,在格蘭XML文檔存在:

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

我的問題是,當我啓動代碼並點擊按鈕進行測試,我t會拋出一個錯誤,指出「對象引用未設置爲對象的實例」。並強調我的線

 persons= informationProvider.GetPeople(searchShowName); 

我該如何解決這個問題?

+0

你看不出來什麼對象從調試是空? @ _ @ – dnr3

回答

1

persons = informationProvider.GetPeople(searchShowName);

因爲信息提供商尚未實例,這將引發錯誤。

通過看你的方法GetPeople,它是安全地說,你可以把它靜態這樣

public static List<Person> GetPeople(string searchstring) 

,然後直接從類的名字稱呼它。

+0

事實上,它確實很有用,我曾將infoprovider聲明爲「新的InformationProvider();」謝謝。那是愚蠢的。 – touyets

1

你需要讓GetPeople靜:

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

或創建informationProvider類的一個實例:

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

注意我是如何改變了外殼和我沒有創建一個多餘的空單。

相關問題