2011-03-22 38 views
2

我有一个列表框,我已经设置了itemstemplate,如下所示。如何访问Listbox内的复选框?

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> 

我想所有复选框已selected.Is有什么办法让每个项目的复选框控制,这样我可以检查其IsChecked属性。

我能想到的结合property.But器isChecked的方式是否有任何其他方式做到这一点?

+0

我发现这个链接有用:HTTP://blogs.msdn.com/b/kmahone/archive/2009 /03/29/visualtreehelper.aspx – Vaysage 2011-03-22 12:02:32

回答

3

是。一种方法是绑定IsChecked属性。如果您使用的是MVVM,那么这可能是正确的做法。

不管怎么说,如果你不想去的结合方式,假设你要遍历列表框的所有项目,并准备检查的项目清单,看看是否这有助于: WPF - Find a Control from DataTemplate in WPF

2

如果你已经绑定到该项目模板标题财产那就肯定是有意义的结合器isChecked了。

如果您确实需要,可以使用VisualTreeHelper来查找CheckBox实例,以便漫游可视化树。

1

IsChecked属性绑定到包含在DataList内的对象实例的布尔属性将是最简单和最干净的方式。另外,如果你想避免背后的代码,那么你可以写一个附加的属性。

0

我敢打赌,它不能简单得多:

<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>