如何通过lambda从网格中删除子UIElement?

时间:2019-05-17 07:27:16

标签: c# wpf

这是XAML:

<Grid x:Name="G">
        <Grid.ColumnDefinitions>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <CheckBox Grid.Column="0"></CheckBox>
        <CheckBox Grid.Column="1" IsChecked="True"></CheckBox>
        <CheckBox Grid.Column="2" IsChecked="True"></CheckBox>
        <CheckBox Grid.Column="3"></CheckBox>
    </Grid>

我想删除CheckBox为真的Grid中的所有IsChecked

所以我写了这样的代码:

var RemoveList=G.Children.OfType<CheckBox>().Where(Child => Child.IsChecked == true);
foreach (CheckBox CB in RemoveList.ToList())
      {
      G.Children.Remove(CB);
      }

我认为我的代码对于var RemoveList是多余的,必须将其更改为列表。

我想找到一种方法,仅用一行代码删除UIElement,就可以使我更多地了解Lambda。

有没有办法做到这一点?谢谢。

1 个答案:

答案 0 :(得分:2)

G.Children
    .OfType<CheckBox>()
    .Where(child => child.IsChecked == true)
    .ToList()
    .ForEach(child => G.Children.Remove(child));