2013-06-27 23 views
0

我有一個包含超過ListViewItem的 每一個ListViewItem包含一個複選框一個ListView:如何從WPF中的ListViewItem獲取複選框?

<ListViewItem> 
     <CheckBox IsChecked="{x:Null}" Name="myCheckBx1"> 
      <StackPanel Margin="10,0,10,0" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Stretch"> 
       <TextBlock Text="Airline"></TextBlock> 
      </StackPanel> 
     </CheckBox> 
    </ListViewItem> 
<ListViewItem> 
     <CheckBox IsChecked="{x:Null}" Name="myCheckBx2"> 
      <StackPanel Margin="10,0,10,0" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Stretch"> 
       <TextBlock Text="Fleet"></TextBlock> 
      </StackPanel> 
     </CheckBox> 
    </ListViewItem> 

現在在C#我想在我的ListView中所有的複選框,我該怎麼辦呢? 我想做以下事情:

foreach(ListViewItem item in listView) { 
    // Get the checkBox here 
} 

謝謝。

+0

爲什麼你想擁有所有複選框。? – JSJ

+0

是的,想要得到我ListView中的所有複選框 – Younes

+0

我想我問爲什麼? – JSJ

回答

3

您還可以使用LogicalTreeHelper如果沒有別的辦法:

<ListView x:Name="list"> ... </ListView> 

在後臺代碼:

var ref = LogicalTreeHelper.GetChildren(list); 

它返回IEnumerable的。我認爲通過執行此代碼,您將獲得包含ListViewItems元素的IEnumerable。因此,對於此集合中的每個元素,請使用相同的圖案:

var ref = LogicalTreeHelper.GetChildren(list); 

然後您將看到複選框對象。然後你可以從你的複選框中獲得你想要的所有物業。

例子:

foreach (object listView in LogicalTreeHelper.GetChildren(list as FrameworkElement)) 
{ 
    foreach (object checkbox in LogicalTreeHelper.GetChildren(obj as FrameworkElement)) 
    { 
     // Some code 
    } 
} 
+0

我做同樣的事情,但我得到了在執行, 的foreach錯誤(在LogicalTreeHelper.GetChildren對象列表(如ListView的FrameworkElement的)){ 的foreach (在LogicalTreeHelper.GetChildren對象複選框(列表,FrameworkElement的)){ CheckBox c =複選框作爲CheckBox; c.IsChecked = true; } } 我試着檢查每個複選框,例如,並得到XamlParseException消息:無法創建listView的實例 – Younes

+0

所以你有一個XamlCode的問題。當你得到XamlParseException時,你總是得到代碼行和代碼列。檢查您的xaml代碼並查找錯誤。我複製了這個解決方案,我複製了你的xaml代碼並粘貼它(ofcourse ListViewItem的必須是ListView的childrem,所以我將它添加到你的xaml代碼中)。如果發生問題,請粘貼一些代碼。 –

0

使用ListViewItem.Content財產

+0

如何使用它?我試圖做到:foreach(ListView.Items中的ListViewItem項目)var v = item.Content as CheckBox;但v總是空值! – Younes

0

與它們進行標識的所有複選框(bcoz這些都是在不同的列表項)。使用下面的代碼

foreach(ListViewItem item in listView) { 
    CheckBox chk=item.FindControl("checkboxid"); 
} 
+0

在ListViewItem上找不到FindControl()方法? – Younes