如何访问Listbox中的Checkbox?

时间:2011-03-22 11:16:57

标签: c# wpf silverlight windows-phone-7

我有一个列表框,我已经设置了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属性的方法。但还有其他方法吗?

5 个答案:

答案 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>
相关问题