为什么加载事件的组合框不保存列表
本文关键字:保存 列表 组合 加载 事件 为什么 | 更新日期: 2023-09-27 18:17:00
我有一个类,说类A,我已经在构造函数中初始化了一个列表(我使用HashSet
),以便在整个程序中访问它。
这个东西是正常的加载事件?有人能告诉我如何保存列表中添加的数据(我使用HashSet
)在加载事件?我的代码是:
static HashSet < string > listOfUpdatedUIElement = new HashSet < string > ();
static HashSet < string > storeUpdatedUIElement = new HashSet < string > ();
//This in constructor
GenerateParametersPreview()
{
storeUpdatedUIElement = null;
}
public Grid simeFunction() {
ComboBox cmb = new ComboBox();
cmb.Loaded += (o3, e) => {
foreach(string atrb in listOfUpdatedUIElement) //I have seen on debugging the data are updated in listOfUpdatedUIElement
{
storeUpdatedUIElement.Add(atrb);
}
};
foreach(string atrb in storeUpdatedUIElement) //Here storeUpdatedUIElement hashset contains nothing inside
{
cmb.Items.Add(atrb);
}
Grid.SetColumn(cmb, 1);
comboRowGrid.Children.Add(cmb);
Grid.SetRow(comboRowGrid, 0);
bigGrid.Children.Add(comboRowGrid); //suppose ihad created this bigGrid and it will dispaly my comboBox
return (bigGrid);
}
事件是事件驱动编程范例的主要工具。
在事件驱动编程中,您不确定何时以及是否有一些条件发生了变化(例如某些ComboBox最终是否加载),您正在对有关该变化引发事件的通知做出反应。
意思是
cmb.Loaded += (o3, e) =>
{
foreach(string atrb in listOfUpdatedUIElement)//I have seen on debugging the data are updated in listOfUpdatedUIElement
{
storeUpdatedUIElement.Add(atrb);
}
};
不会(至少不可能)在
之前执行。 foreach(string atrb in storeUpdatedUIElement) //Here storeUpdatedUIElement hashset contains nothing inside
{
cmb.Items.Add(atrb);
}
这就是为什么当循环枚举storeUpdatedUIElement
时它是空的。
解决方案:
所以,如果你想在Loaded
事件上更新你的ComboBox
项目,你应该把所有相关的代码放在事件中:
cmb.Loaded += (o3, e) =>
{
foreach(string atrb in listOfUpdatedUIElement)//I have seen on debugging the data are updated in listOfUpdatedUIElement
{
storeUpdatedUIElement.Add(atrb);
}
foreach(string atrb in storeUpdatedUIElement) //Here storeUpdatedUIElement hashset contains nothing inside
{
cmb.Items.Add(atrb);
}
};
注::在这种情况下,您可能应该将这两个循环合并为一个:
foreach(string atrb in listOfUpdatedUIElement)//I have seen on debugging the data are updated in listOfUpdatedUIElement
{
storeUpdatedUIElement.Add(atrb); // Remove it too if it is not used anywhere else
cmb.Items.Add(atrb);
}
simeFunction
正在使用一个从未添加到表单中的新组合框。
当这个组合框被加载时,你希望你的列表被填充,因为它从来没有添加到你的表单,它永远不会被加载。