在 WPF 应用程序主窗口的代码隐藏文件中,我有一个使用 LINQ to SQL 查询数据库并将结果写入 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
});
}
当我从同一代码隐藏文件(同一窗口)调用此方法时,一切正常。
如果我使用主窗口的实例从另一个窗口调用此方法,ObservableCollection 仍为空:
SWindow sw = new SWindow();
sw.GetStateByDate(stringpar);
这是什么原因呢?在这种情况下,方法是否会创建 ObservableCollection 的另一个实例?
(我可以在调试器中看到sw._ShAvaQuCollection
包含值。是sw._ShAvaQuCollection
与集合的实例不同_ShAvaQuCollection
?如果是,如何解决?)
已编辑(已添加)
ObservableCollection 是这样声明的:
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; }
}
我从一个窗口调用该方法,其中另一个集合ShQuCollection
通过ListView显示。在 SelectionChanged 事件处理程序中,我采用此数据库查询的参数:
private void ShSelList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
SWindow sw = new SWindow();
string str = sw.ShQuCollection[ShSelList.SelectedIndex].ShCode;
sw.GetStateByDate(str);
Close();
}
}