如果取消选中其中一行,则取消选中SelectAll

时间:2010-08-25 04:21:04

标签: wpf vb.net

我有一个问题。当我检查SelectAllCheckBox时,检查ListView中的所有复选框列。但是当我取消选中行复选框之一时,仍会检查SelectAllCheckBox。如果取消选中其中一行,如何取消选中SelectAllCheckBox?第二个问题是在选中SlectAllCheckBox时如何突出显示ListView行?

我的XAML

<Window.Resources>
  <DataTemplate x:Key="CheckBoxCell">
    <StackPanel Orientation="Horizontal">
      <CheckBox Name="chk" IsChecked="{Binding Path=IsSelected, 
        RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}}"/>
    </StackPanel>
  </DataTemplate>
</Window.Resources>

  <StackPanel Name="Panel1" >
    <StackPanel Grid.IsSharedSizeScope="True">
      <CheckBox Name="SelectAllCheckBox" Margin="5">Select All</CheckBox>
    </StackPanel>
    <ListView Name="ListView1" Background="#f8f8FF" BorderThickness="0" 
               ItemsSource="{Binding Path={}}" Visibility="Visible" Height="Auto" 
               GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler" 
               IsSynchronizedWithCurrentItem="True" 
               VerticalContentAlignment="Center" FontFamily="Tahoma" FontSize="12" 
               Grid.IsSharedSizeScope="False" >
      <ListView.View>
        <GridView AllowsColumnReorder="True" ColumnHeaderContainerStyle="{StaticResource HeaderStyle}">
          <GridViewColumn CellTemplate="{StaticResource CheckBoxCell}" Width="30"/>
          <GridViewColumn ... />
          <GridViewColumn ... />
          <GridViewColumn ... />
        </GridView>
      </ListView.View>
    </ListView>
  </StackPanel>

和背后的代码

  Private Sub ListView1_SelectionChanged(ByVal sender As Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs) Handles ListView1.SelectionChanged
    If ListView1.SelectedItems.Count > 0 Then
      For i As Integer = 1 To ListView1.SelectedItems.Count
        Dim TestDataRow As System.Data.DataRowView
        TestDataRow = ListView1.SelectedItems(i - 1)
      Next
    End If
  End Sub

1 个答案:

答案 0 :(得分:0)

我认为要解决你的突出问题,你只需要确保你的复选框绑定到IsSelected属性。

<CheckBox Name="chk" IsChecked="{Binding Path=IsSelected, Mode=TwoWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}}"/>

对于全选复选框,您可以通过多种方式进行操作。一种方法是将复选框的IsChecked属性绑定到listview的SelectedItems属性,然后编写一个转换器,检查selectitem计数是否等于总行数。