我正在使用带有网格的窗口,它从 MongoDB 加载对象。这些对象包含列表。现在我想从这些对象之一加载一个列表。这是来自窗口的来源:
public void btn_load_Click(object sender, RoutedEventArgs e)
{
MainWindow M = new MainWindow();
ArtikelLaden();
M.RefreshGrid();
Close();
}
public void ArtikelLaden()
{
MainWindow M = new MainWindow();
rowindexArtikel = dg_Artikel.SelectedIndex;
Artikel B = new Artikel();
B = artikelList[rowindexArtikel];
M.loadArtikel(B);
}
列表应该加载到主窗口中:
public void loadArtikel(Artikel B)
{
dg_test.ItemsSource = null;
dg_test.ItemsSource = B.kaufList;
dg_test.Items.Refresh();
MessageBox.Show(dg_test.HasItems.ToString());
MessageBox.Show(dg_test.Items.Count.ToString());
dg_Teile.ItemsSource = null;
dg_Teile.ItemsSource =B.teilList;
dg_Teile.Items.Refresh();
//dg_Teile.Items.Refresh();
//dg_BauGrp.ItemsSource = B.bauList ;
}
public void RefreshGrid()
{
//dg_Kaufteile.UpdateLayout();
//dg_Kaufteile.Items.Refresh();
//dg_Teile.UpdateLayout();
MessageBox.Show(dg_Kaufteile.HasItems.ToString());
MessageBox.Show(dg_Kaufteile.Items.Count.ToString());
}
当你在源代码中看到一些奇怪的东西时,只是因为我现在已经测试了数千种可能性。但主窗口中的网格始终保持为空。
第一个MsgBox表示网格有内容。后来在刷新方法的第二个 MsgBox 中它说它是空的?!
当我在第一个窗口中加载列表时,它可以工作。网格启用了自动列。
您正在创建
MainWindow
的新实例,但您可能想要访问屏幕上看到的现有实例。试试这个:
public void btn_load_Click(object sender, RoutedEventArgs e)
{
MainWindow M = Application.Current.Windows.OfType<MainWindow>().FirstOrDefault();
ArtikelLaden(M);
M.RefreshGrid();
Close();
}
public void ArtikelLaden(MainWindow M)
{
rowindexArtikel = dg_Artikel.SelectedIndex;
Artikel B = new Artikel();
B = artikelList[rowindexArtikel];
M.loadArtikel(B);
}