我有一个列表框,我已经设置了itemstemplate,如下所示。
XAML:
<ListBox ItemsSource="{Binding DataList}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox x:Name="CheckBox" HorizontalAlignment="Center" VerticalAlignment="Center" />
<TextBlock x:Name="TextBlock" Text="{Binding Title}" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="10,0,0,10" FontSize="26.667" TextWrapping="Wrap"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我想获取所有选中的复选框。是否有任何方法可以获取每个项目的复选框控件,以便我可以检查其IsChecked
属性。
我可以想到一种绑定IsChecked属性的方法。但还有其他方法吗?
答案 0 :(得分:3)
是。一种方法是绑定IsChecked属性。如果您正在使用MVVM,那可能是正确的方法。
无论如何,如果您不想采用绑定方式,并假设您要迭代列表框的所有项目,并准备一个已检查项目列表,请查看是否有帮助: WPF - Find a Control from DataTemplate in WPF
答案 1 :(得分:2)
如果您已经绑定了项目模板中的标题属性,那么绑定到 IsChecked 也一定有意义。
如果确实需要,可以使用VisualTreeHelper
查看CheckBox
个实例来浏览可视树。
答案 2 :(得分:1)
将IsChecked
属性绑定到DataList
中包含的对象实例上的布尔属性将是最简单和最干净的方法。或者,如果您想避免代码隐藏,那么您可以编写附加属性。
答案 3 :(得分:1)
答案 4 :(得分:1)
我打赌它不能比那简单:
<ListBox SelectionMode="Multiple" >
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox
IsChecked="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}"
Content="{Binding Path=Content, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>