2017-06-04 2 views
1

Ich verwende ein Fenster mit einem Grid, das Objekte aus einer MongoDB lädt. Dieses Objekt enthält Listen. Jetzt möchte ich eine Liste von einem dieser Objekte laden. Dies ist die Quelle aus dem Fenster:WPF Grid zeigt keinen Inhalt an

 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); 
    } 

Die Liste soll im Hauptfenster geladen werden: `

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()); 
    } 

Wenn u einig curios Dinge in der Quelle sehen ist, nur weil ich jetzt Tausende von Möglichkeiten testen . Aber die Grids im MainWindow bleiben immer einfach leer.

Die erste MsgBox sagt, dass das Raster Inhalt hat. Später in der zweiten MsgBox in der Refresh-Methode heißt es leer ?!

Wenn ich die Listen im ersten Fenster laden, funktioniert es. Die Grids haben AutoColumn aktiviert.

`

+1

Machen Sie sich mit MVVM vertraut. Die gesamte Logik in Bezug auf MongoDB sollte vom View-Modell gehandhabt und koordiniert werden. Verwenden Sie Bindungen in XAML. Wenn Sie ItemsControls (wie ListBox, ComboBox usw.) verwenden, sollten Sie ItemsSource außerdem verwenden, die Items -Eigenschaft nie zu berühren. Wenn Sie Ihre Bindungen richtig einrichten, müssen Sie die Aktualisierung auch nicht manuell aufrufen. (Und warum setzen Sie eine Variable/Eigenschaft, und setzen Sie sie dann wieder rechts in der nächsten Codezeile (wie "B", "dg_test.ItemsSource", "dg_Teile.ItemsSource")? Das ist ziemlich albern ...) – elgonzo

+0

In WPF können Sie nicht nur Elemente festlegen, die gebunden sind und erwarten, dass sie nur in der GUI angezeigt werden. Sie müssen das Eigenschaftensystem darüber informieren, dass neue Elemente geändert wurden. Suchen Sie nach INPC oder DependencyObject für WPF. –

+0

Ich weiß, es ist nicht der perfekte/beste/richtige Weg und mvvm ist in der Zukunft geplant, aber ich wollte einen funktionierenden Prototyp erstellen, um alle Grundlagen zu lernen und dann mit einer korrekten kodierten GUI zu beginnen. –

Antwort

0

Sie eine neue Instanz von MainWindow zu schaffen, aber Sie wollen wahrscheinlich die bereits vorhandenen zuzugreifen, die Sie auf dem Bildschirm sehen. Versuchen Sie Folgendes:

+0

Vielen Dank !!! –