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”的网格。在运行投资窗口的代码时,我运行了一个名为“StockItem”的类,它接受一大堆输入并将它们写入一个组框和几个文本框,然后将它们放入堆栈面板中。我不会复制 StockItem 类的整个代码,但最后一部分是当我尝试将组框添加到堆栈面板时生成错误的部分:

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

错误消息说 System.NullReferenceException:对象引用未设置为对象的实例。

我尝试了很多事情,有些没有帮助,有些更糟。我知道这是由于我缺乏理解,但请耐心等待,我只是尽力而为。感谢您为我指明正确的方向。如果您需要更多信息或代码,请告诉我。

带着感激之情!

沃特

4

1 回答 1

0

似乎您没有设置 App.mw.investwindow 对象。可以通过调试找到空对象来确定。我的建议如下:

您可以在其中创建一个静态集合,该集合App.xaml.cs包含对您在窗口中需要的任何数据对象的引用。

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

将 InvestSP 网格的 ItemsSource 设置为此集合。

当您想InvestSP从另一个窗口向您的网格添加一些东西时,只需将您的对象添加到此集合中:

App.GroupBs.Add(GroupB);

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

于 2013-01-02T12:46:48.540 回答