如何删除网格行上以前更新的UIElement以添加新的UIElement?

时间:2014-08-08 11:36:09

标签: c# .net silverlight row

我在silverlight工作,我有一个名为“bigGrid”的网格,其中包含三行,在第一行我有组合框,我在两个不同的行上更新两个UI元素加载comboBox(我的意思是第二行bigGrid)因为bigGrid是我所有的父节点或者代码中的第一行和第二行rowGrid。)

现在在combobox的selectionChanged事件中,我必须用从组合框中选择的UI元素替换先前渲染的UI元素(如果UIelement是一个,它将显示在一行上,如果UI元素是两个,它们将被显示在一个接一个的两个不同的行上(请注意,在加载此组合框时,我连续2行显示2个UI元素。)

现在问题?:当我加载组合框时,网格中的两个UIelement已初始化。但是在Selectionchnaged事件中,当我渲染2个元素时,它会因2个UIElements而被罚款(它取代了之前两行上Loaded事件的渲染。但问题是当我在第一行只显示1个UIElement时,因为选择更改事件的最近发送的uiElement无疑在第一行更新,但第二行的UI元素(从组合框加载甚至仍然存在)。

如何删除这个以前持久存在的UI元素?

我的代码(请注意我已经给出了有用的代码。当然comc在某处被声明,并且它也有项目)

public Grid somefunction() //this function returs the final bigGrid (which contains all the ROWS CONATINING ui ELEMNTS)
    {
      cmb.Loaded += (o3, e) =>
                {
                    foreach (object o in pv.Root.Parameter)
                    {
                        param = (Parameter)o;
                        if (o is Parameter)
                        {
                         rowGrid = IntializeUIElements(param, atrbt);
                        } 
                        Grid.SetRow(rowGrid, loopCount);
                    }
                        bigGrid.Children.Add(rowGrid);
                        loopCount++;
                };




     cmb.SelectionChanged += (o1, e) =>
                {
                    string selectedComboItem = cmb.SelectedItem.ToString();
                    Grid storeRowGrid = new Grid();
                    for (int i = 0; i < pv.Root.Parameter.Count; i++)
                    {
                        storeRowGrid.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto });
                    }
                    int count = 0;
                    foreach (object o in pv.Root.Parameter)
                    {
                        if (o is Parameter)
                        {
                            rowGrid = IntializeUIElements(param, atrbt); //It returns the grid with UI element
                            Grid.SetRow(rowGrid, count);
                            storeRowGrid.Children.Add(rowGrid);
                            Grid.SetRow(storeRowGrid, count);
                            if (bigGrid.Children.Count > 1)
                            {
                                bigGrid.Children.RemoveAt(bigGrid.Children.Count - 1); //this is to remocve previous item on selection change
                            }
                            count++;
                        }

                    }             

                             bigGrid.Children.Add(storeRowGrid);
                };

                Grid.SetColumn(cmb, 1);
                comboRowGrid.Children.Add(cmb);
                Grid.SetRow(comboRowGrid, 0);
                bigGrid.Children.Add(comboRowGrid); //This BigGrid is parent Grid.
                return bigGrid;
    }

当选择更改事件时,如何清除第二行上的Loaded事件的先前UI元素 &安培;第一排中的元素?

1 个答案:

答案 0 :(得分:1)

你的布局是这样的:

<Grid>
  <ComboBox Grid.Row="0"/>
  <SomeControl Grid.Row="1"/>
  <SomeOtherControl Grid.Row="2"/>
   ...
</Grid>

如果你更喜欢这样:

<Grid>
  <ComboBox Grid.Row="0"/>
  <Grid x:Name="grid with controls chosen by the Combobox selection" Grid.Row="1">
    <SomeControl Grid.Row="0"/>
    <SomeOtherControl Grid.Row="1"/>
  </Grid>
   ...
</Grid>

您不必担心要移除多少个控件,因为您只需删除/替换单个网格。