Metoda wywołania z innego okna (klasy)
W kodzie za plikiem głównego okna aplikacji WPF mam metodę kwerendy bazy danych z LINQ do SQL i zapisywania wyników do ObservableCollection:
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
});
}
Gdy wywołam tę metodę z tego samego kodu za plikiem (to samo okno), wszystko jest w porządku.
Jeśli wywołam tę metodę z innego okna, używając instancji okna głównego, ObservableCollection pozostaje puste:
SWindow sw = new SWindow();
sw.GetStateByDate(stringpar);
Jaka jest tego przyczyna? Czy w tym przypadku metoda tworzy kolejną instancję ObservableCollection?
(Widzę to w debuggerzesw._ShAvaQuCollection
zawiera wartości. Jestsw._ShAvaQuCollection
nie ten sam zbiór jak_ShAvaQuCollection
? Jeśli tak, jak można to rozwiązać?)
Edytowane (dodane)
ObservableCollection oświadczyło w ten sposób:
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; }
}
Nazywam metodę z okna, gdzie inna kolekcjaShQuCollection
wyświetlane przez ListView. W procedurze obsługi zdarzeń SelectionChanged biorę argument za zapytaniem o bazę danych:
private void ShSelList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
SWindow sw = new SWindow();
string str = sw.ShQuCollection[ShSelList.SelectedIndex].ShCode;
sw.GetStateByDate(str);
Close();
}
}