【问题标题】:How to add item to listbox of a different window? WPF如何将项目添加到不同窗口的列表框? WPF
【发布时间】:2019-12-28 12:36:13
【问题描述】:

在我的 MainWindow(参见图片)中,我有一个列表框和一个名为 btnToevoegen 的按钮,它打开了我的第二个窗口(参见第二张图片),在该窗口中,一个名为 oToevoegen 的类获取 3 个整数的信息。

现在您可以看到,当用户在第二个窗口中输入完信息后,他可以按下“volgende”(荷兰语中的“下一步”)按钮。见代码

        public void btnVolgende_Click(object sender, RoutedEventArgs e)
        {
            MainWindow wdwMain = new MainWindow();
            Toevoegen oToevoegen = new Toevoegen();

            wdwMain.lstFinanceInfo.Items.Add(oToevoegen);

            wdwMain.lstFinanceInfo.Items.Refresh();

            this.Close();
        }

按下该按钮时,我希望将类添加到名为 lstFinanceInfo 的 lstBox(在我的 mainWindow 上),但我不知道如何。我试过的方法不行。

【问题讨论】:

    标签: c# wpf visual-studio


    【解决方案1】:

    你的代码有几个问题。

    当你这样做时

    MainWindow wdwMain = new MainWindow();
    

    这会创建一个新的 MainWindow 实例。然后你不会 .Show() 这个,所以它只是在内存中徘徊。不过,您可能已经有一个 mainwindow 实例。由于这是 Mainwindow 的另一个实例,而不是可见的实例,因此您可以对它做任何您喜欢的事情,并且不会有任何明显的变化。

    公开控制在技术上是可行的——但是——这是不好的做法。不要那样做。

    向 MainWindow 添加一个公共方法,例如:

        public void AddItem (Toevoegen tv)
        {
            lstFinanceInfo.Items.Add(tv);
        }
    

    因为它是公开的,所以您可以从其他一些类(例如您的第二个窗口)调用它。

    您需要做的就是获取引用并调用您添加的方法。应用程序有一个 mainwindow 属性,它将包含该属性,因此将其从那里抓取并投射到 Mainwindow:

            MainWindow mw = Application.Current.MainWindow as MainWindow;
            mw.AddItem(oToevoegen);
    

    【讨论】:

      【解决方案2】:

      你为什么不试试 wdwMain.lstFinanceInfo.Items.Add(oToevoegen.Text); 但首先要确保 oToevoegen 有一个 Text 属性(它有你想要显示的文本)

      【讨论】:

      • oToevoegen 是一个类,它只存储了 3 个变量。我认为它不需要 .Text,但我一定会尝试。我该怎么做?
      • 为什么不调用 wdwMain.Show()
      • 控件是私有成员。您不能从该类外部设置私有成员的属性。
      猜你喜欢
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      • 2011-11-12
      • 2023-03-13
      • 2017-10-28
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多