我有一个相当简单的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());
}
}
我的MainWindow类包含一堆按钮,例如:
:private void btnInvest_Click(object sender, RoutedEventArgs e)
{
investwindow = new Invest();
investwindow.Show();
}
在XAML的此Investwindow上,我有一个名为" Investsp"的网格。在运行Investwindow的代码后,我运行了一个名为" Stockitem"的类,该课程采用了一大堆输入,并将其写入组盒和一些文本盒中,然后将它们放入Stackpanel。我不会复制stockitem类的整个代码,但是最后一部分是当我尝试将GroupBox添加到StackPanel中时生成错误的代码:
try
{
App.mw.investwindow.InvestSP.Children.Add(GroupB);
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
错误消息说系统。nullReferenceException:对象引用未设置为对象的实例。
我已经尝试了很多事情,有些没有帮助,有些使情况变得更糟。我知道这是由于我缺乏理解,但是请对我耐心,我只是尽力而为。感谢您指出我的方向正确。如果您需要更多信息或代码,请告诉我。
感激!
wouter
似乎您未设置app.mw.investwindow对象。您可以通过调试以确保找到空对象。我的建议如下:
您可以在App.xaml.cs
中创建一个静态集合,该集合可以参考Windows中您需要的任何数据对象。
public static ObservableCollection<GroupB> GroupBs {get; set;} // in App.xaml.cs
将您的Investsp网格的物品设置为此系列。
当您想从另一个窗口向InvestSP
网格添加一些东西时,只需将您的对象添加到此集合中:
App.GroupBs.Add(GroupB);
您会看到您的网格已更新。