2011-03-22 100 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>