查找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。
一个更好的方法是在你的模型中添加属性来存储它的状态(选中/未选中):
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
}