我有一个相当简单的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的这个投资窗口中,我有一个名为“InvestSP”的网格。 运行investwindow的代码后,我运行一个名为“StockItem”的类,它接受一大堆输入并将它们写入一个组框和一些文本框,并将它们放入堆栈面板。我不会复制StockItem类的整个代码,但最后一部分是当我尝试将groupbox添加到stackpanel时产生错误的部分:
try
{
App.mw.investwindow.InvestSP.Children.Add(GroupB);
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
错误消息显示System.NullReferenceException:对象引用未设置为对象的实例。
我尝试了很多东西,有些没有帮助,有些让事情变得更糟。我知道这是由于我缺乏理解,但请耐心等待我,我只是尽我所能。 谢谢你指点我正确的方向。如果您需要更多信息或代码,请告诉我。
感激不尽!
的Wouter
答案 0 :(得分:0)
好像你没有设置App.mw.investwindow对象。您可以通过调试找到null对象以确保。我的建议如下:
您可以在App.xaml.cs
中创建一个静态集合,该集合包含对Windows中所需的任何数据对象的引用。
public static ObservableCollection<GroupB> GroupBs {get; set;} // in App.xaml.cs
将InvestSP网格的ItemsSource设置为此集合。
如果您想从其他窗口向InvestSP
网格添加内容,只需将您的对象添加到此集合中:
App.GroupBs.Add(GroupB);
您将看到您的网格已更新。