如何将对象从类添加到实例化窗口



我有一个相当简单的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);

您会看到您的网格已更新。