如何将类中的对象添加到实例化窗口?

时间:2013-01-02 06:20:04

标签: c# wpf instances

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

1 个答案:

答案 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);

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