查找xaml页面上的每个复选框控件

本文关键字:复选框 控件 xaml 查找 | 更新日期: 2023-09-27 18:09:56

我试图以编程方式找到所有复选框,以便我可以看到它们是否被选中。下面的代码是xaml的样子,并且为列表中的每个项目创建了一个复选框。有人知道我如何在我的代码中做到这一点吗?

<ScrollViewer Grid.ColumnSpan="5" Grid.Row="3" Height="350" Name="scrollViewer" >
                <ItemsControl Name="lstTop10Picks">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Grid Margin="6" Name="gridTop11Stocks">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*" />
                                    <ColumnDefinition Width="*" />
                                    <ColumnDefinition Width="2*" />
                                    <ColumnDefinition Width="2*" />
                                    <ColumnDefinition Width="2*" />
                                </Grid.ColumnDefinitions>
                                <CheckBox Style="{StaticResource CheckStyle}" Grid.Column="0" Grid.Row="3">
                                    <CheckBox.RenderTransform>
                                        <ScaleTransform ScaleX="0.5" ScaleY="0.5" />
                                    </CheckBox.RenderTransform>
                                </CheckBox>
                                <TextBlock Style="{StaticResource NumberStyle}" Grid.Column="1" Grid.Row="3" Text="{Binding Id}" />
                                <TextBlock Style="{StaticResource SummaryStyle}" Grid.Column="2" Grid.Row="3" Text="{Binding Symbol}" HorizontalAlignment="Left" />
                                <TextBlock Style="{StaticResource SummaryStyle}" Grid.Column="3" Grid.Row="3" Text="{Binding Market}" />
                                <TextBlock Style="{StaticResource SummaryStyle}" Grid.Column="4" Grid.Row="3" Text="{Binding Return}" />
                            </Grid>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </ScrollViewer>
var stocks = doc.Element(ns + "ArrayOfStockRating").Elements(ns + "StockRating")
        .Select(n => new
        {
            Id = count += 1,
            Symbol = n.Element(ns + "Symbol").Value,
            Market = n.Element(ns + "Market").Value,
            Return = n.Element(ns + "ShortRating").Value
        })
        .ToList();

lstTop10Picks。

查找xaml页面上的每个复选框控件

一个更好的方法是在你的模型中添加属性来存储它的状态(选中/未选中):

public class MyModel
{
    .....
    .....
    public bool? IsChecked { get; set; }
}

然后将您的CheckBox绑定到上述属性:

<CheckBox IsChecked="{Binding IsChecked}"
    Style="{StaticResource CheckStyle}" Grid.Column="0" Grid.Row="3">
    <CheckBox.RenderTransform>
        <ScaleTransform ScaleX="0.5" ScaleY="0.5" />
    </CheckBox.RenderTransform>
</CheckBox>

这样你就不必让你的代码混乱,试图从XAML中找到所有的CheckBox,相反,你可以很容易地迭代你的模型并检查它的IsChecked属性(或者更好地使用LINQ)。

更新:

原来你在这里使用匿名类型,所以我们不需要类定义或部分类。只需更改您的LINQ Select()部分,以提供IsChecked属性,默认值设置为false,例如:

.Select(n => new
        {
            Id = count += 1,
            Symbol = n.Element(ns + "Symbol").Value,
            Market = n.Element(ns + "Market").Value,
            Return = n.Element(ns + "ShortRating").Value,
            IsChecked = (bool?)false
        })

然后你可以像这样遍历你的模型:

foreach(dynamic n in (IList)lstTop10Picks.ItemsSource)
{
    bool? isChecked = n.IsChecked;
    //do something with isChecked
}