2013-01-02 137 views
0

我有一個相當簡單的C#/ WPF問題。我在C#/ WPF中的技能不太好,所以如果答案已經存在,我會道歉,但我不夠聰明,無法看到它。如何將類中的對象添加到實例化窗口?

我有我從我App.xaml.cs實例化的主窗口

internal static MainWindow mw; 
protected override void OnStartup(StartupEventArgs e) 
     { 
      try 
      { 
       //investwindow = new Invest(); 
       mw = new MainWindow(); 
       mw.Show(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.ToString()); 
      } 
     } 

我的主窗口類,包含了一些其實例其他窗口/類的按鈕,例如:

private void btnInvest_Click(object sender, RoutedEventArgs e) 
     { 
      investwindow = new Invest(); 
      investwindow.Show(); 
     } 

在XAML的這個投資窗口中,我有一個名爲「InvestSP」的網格。 在運行investwindow的代碼時,我運行一個名爲「StockItem」的類,該類需要一大堆輸入並將它們寫入一個groupbox和幾個文本框中,並將它們放入堆棧面板中。我不會複製StockItem類的整個代碼,但最後一部分是產生一個錯誤,當我嘗試組框添加到StackPanel的:

try 
      { 
       App.mw.investwindow.InvestSP.Children.Add(GroupB); 
      } 
      catch (Exception e) 
      { 
       MessageBox.Show(e.ToString()); 
      } 

錯誤消息稱System.NullReferenceException:對象未設置爲對象的實例。

我試過很多東西,有些沒有幫助,有些更糟糕。我知道這是由於我缺乏理解,但請耐心等待,我只是盡力而爲。 感謝您指點我正確的方向。如果您需要更多信息或代碼,請告訴我。

感謝!

Wouter

+2

你試圖解除引用'null'(如果你說'a.b'和'a'爲'null',你通常會得到這個錯誤)。在該行上放置一個斷點並查看「null」。 –

+0

在您的invest_Click(假設這是在您的MainWindow代碼中),investwindow是什麼?這是MainWindow clasS中的公共變量嗎? – ryadavilli

+0

你是對的,我確實發現了一些與我認爲是問題完全無關的特定對象。我解決了感謝! –

回答

0

似乎你沒有設置App.mw.investwindow對象。您可以通過調試找到空對象以確保。我建議如下:

您可以在您的App.xaml.cs中創建一個靜態集合,該集合可以引用您在窗口中需要的任何數據對象。

public static ObservableCollection<GroupB> GroupBs {get; set;} // in App.xaml.cs 

將您的InvestSP網格的資源設置爲此集合。

當你想的東西從另一個窗口添加到您的InvestSP電網只需添加你的對象插入此集合:

App.GroupBs.Add(GroupB); 

你會看到你的網格更新。

相關問題