1

このリスト ボックスがあり、ユーザーが選択した (IsChecked=true) 項目を検索したい

 <CheckBox Style="{StaticResource ResourceKey=CheckBoxes}"  
  Name="chkBoxSelectAllStaff" Content="Select All">                                                
  </CheckBox>


<ListBox Name="lstStaffs" MaxHeight="250" MinHeight="50" Margin="0,5,5,5" Width="350"
 ScrollViewer.VerticalScrollBarVisibility="Auto" HorizontalAlignment="Right"    
 HorizontalContentAlignment="Right">

<ListBox.ItemTemplate>
    <DataTemplate>
        <CheckBox Style="{StaticResource ResourceKey=CheckBoxes}" IsChecked="{Binding ElementName=chkBoxSelectAllStaff, Mode=OneWay, Path=IsChecked}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding FirstName}" Margin="0,0,3,0"></TextBlock>
                <TextBlock Text="{Binding LastName}" Margin="0,0,3,0"></TextBlock>
                <TextBlock Text="{Binding CellphoneNumber}" Margin="0,0,3,0"></TextBlock>
            </StackPanel>
        </CheckBox>
    </DataTemplate>
</ListBox.ItemTemplate>

私はこのようなことをしたい

 foreach(var item in lstStaff.Items){
    if((CheckBox) item).IsChecked){
          //do something
    }
 }

また、この方法でデータをバインドしています:

//staff is my entity object containing Id, FirstName, LastName, CellphoneNumber
lstStaffs.ItemsSource = args.Result; // comes from webservice call and is Staff[]
lstStaffs.UpdateLayout();

しかし、lstStaffs.Items で Staff オブジェクトを取得します!! では、selected(IsChecked=true) の項目 (staffs) を反復処理するにはどうすればよいですか ...

TNX

4

1 に答える 1

3

MSDNの「方法: DataTemplate で生成された要素を検索する」ページから:

// Getting the currently selected ListBoxItem 
// Note that the ListBox must have 
// IsSynchronizedWithCurrentItem set to True for this to work
ListBoxItem myListBoxItem = (ListBoxItem)(myListBox.ItemContainerGenerator.
    ContainerFromItem(myListBox.Items.CurrentItem));

// Getting the ContentPresenter of myListBoxItem
ContentPresenter myContentPresenter = FindVisualChild<ContentPresenter>(myListBoxItem);

// Finding textBlock from the DataTemplate that is set on that ContentPresenter
DataTemplate myDataTemplate = myContentPresenter.ContentTemplate;
TextBlock myTextBlock = (TextBlock)myDataTemplate.FindName("textBlock", 
    myContentPresenter);

// Do something to the DataTemplate-generated TextBlock
MessageBox.Show("The text of the TextBlock of the selected list item: "
    + myTextBlock.Text);

これは、 で定義された要素にアクセスする方法を示していますDataTemplate。ただし、コレクションから選択されたアイテムにアクセスしたいだけの場合は、もっと簡単な方法があります。

var selectedItems = lstStaffs.SelectedItems;

SelectionModeこれを機能させるには、Multipleまたはを設定する必要がありますExtended

于 2013-10-08T10:51:48.913 に答える