我上课说A级,我已经在结构中给了一个列表(我正在使用HashSet
),以便能够访问整个程序。
我在comboBox的Loaded事件中的列表中添加项目。 Ans我在加载的事件后使用了保存的列表,我发现它不包含我添加的数据。
这件事是否正常加载事件?有人可以告诉我在加载的事件中保存列表中的数据(我使用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);
}
答案 0 :(得分:1)
simeFunction
使用的新组合框从未添加到您的表单中。
您希望在加载此组合框时填充列表,并且由于它从未添加到您的表单中,因此永远不会加载它。
答案 1 :(得分:1)
事件是Event-driven-programming范例的主要工具。
在事件驱动编程中,您不确定何时以及是否有一些条件更改(例如某些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
在循环枚举时为空的原因。
<强> SOLUTION:强>
因此,如果您要更新ComboBox
事件中的Loaded
项,则应将所有相关代码放入事件中:
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);
}
};
P.S。:在这种情况下,您应该将这两个循环合二为一:
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);
}