我有一个问题。当我检查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
答案 0 :(得分:0)
我认为要解决你的突出问题,你只需要确保你的复选框绑定到IsSelected属性。
<CheckBox Name="chk" IsChecked="{Binding Path=IsSelected, Mode=TwoWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}}"/>
对于全选复选框,您可以通过多种方式进行操作。一种方法是将复选框的IsChecked属性绑定到listview的SelectedItems属性,然后编写一个转换器,检查selectitem计数是否等于总行数。