0

我有类说 A 类,我已经在 costructor 中引入了一个列表(我正在使用HashSet),以便通过程序访问它。

我在组合框的 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);
 }
4

2 回答 2

1

simeFunction正在使用从未添加到表单中的新组合框。

您希望在加载此组合框时填充您的列表,并且由于它从未添加到您的表单中,因此永远不会加载。

于 2014-08-07T12:14:00.040 回答
1

事件是事件驱动编程范式的主要工具。

在事件驱动编程中,您不确定何时以及是否有某些条件更改(例如某些 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当循环枚举它时它是空的。

解决方案:

因此,如果您想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);
     }  
};

PS:在这种情况下,您可能应该将这两个循环合并为一个:

     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);
     }
于 2014-08-07T12:21:31.150 回答