Aufrufen der Methode aus einem anderen Fenster (Klasse) Problem

In der Code-Behind-Datei des Hauptfensters der WPF-Anwendung habe ich eine Methode, die eine Datenbank mit LINQ to SQL abfragt und die Ergebnisse in eine ObservableCollection schreibt:

    public void GetStateByDate(string shcode)
    {
        MydbDataContext contextSts = new MydbDataContext();
        _ShAvaQuCollection.Clear();

        var sts = from p in contextSts.SAties where p.ShID == shcode select p;

        foreach (var p in sts)
            _ShAvaQuCollection.Add(new ShAvaQu
            {
                ShCode = p.ShID,
                SiID = p.SiID,
                PrCat = p.PrCat
            });
    }

Wenn ich diese Methode aus dem gleichen Code hinter der Datei (dem gleichen Fenster) aufrufe, ist alles in Ordnung.

Wenn ich diese Methode von einem anderen Fenster aus aufrufe und eine Instanz des Hauptfensters benutze, bleibt ObservableCollection leer:

SWindow sw = new SWindow();
sw.GetStateByDate(stringpar);

Was ist der Grund dafür? Erstellt die Methode in diesem Fall noch eine weitere Instanz von ObservableCollection?

(Ich kann das im Debugger sehensw._ShAvaQuCollection enthält Werte. Istsw._ShAvaQuCollection nicht der gleiche Zeitpunkt der Sammlung als_ShAvaQuCollection? Wenn ja, wie kann das behoben werden?)

Bearbeitet (hinzugefügt)

Die ObservableCollection erklärte dies so:

    ObservableCollection<ShAvaQu> _ShAvaQuCollection =
            new ObservableCollection<ShAvaQu>();

    public ObservableCollection<ShAvaQu> ShAvaQuCollection
    { get { return _ShAvaQuCollection; } }

    public class ShAvaQu
    {
        public string ShCode { get; set; }
        public string SiID { get; set; }
        public int PrCat { get; set; }
    }

Ich rufe die Methode von einem Fenster aus auf, in dem sich eine andere Sammlung befindetShQuCollection wird über ListView angezeigt. Im SelectionChanged-Ereignishandler nehme ich ein Argument für diese Datenbankabfrage:

private void ShSelList_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {           
        SWindow sw = new SWindow();         
        string str = sw.ShQuCollection[ShSelList.SelectedIndex].ShCode;
        sw.GetStateByDate(str);
        Close();
    }
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage