[英]Cannot select multiple row in wpf data grid
我有一個數據網格,我的目的是在選中行的復選框單元格時 select 多行。 問題是總是選擇一行。 如果 i select 一行,則之前檢查的行的 IsSelected 屬性返回 false。 請檢查后面的代碼。 當檢查任何行的復選框時,我將“已符合”屬性設置為True。 下一次檢查其他行刪除以前的選擇。 我不知道原因。
Xaml
<DataGrid VirtualizingStackPanel.VirtualizationMode="Standard" EnableColumnVirtualization = "True" EnableRowVirtualization ="True" x:Name="deckGrid" Grid.Row="3" ItemsSource="{Binding DeckList}" AutoGenerateColumns="False"
SelectionMode="Extended" Margin="10,10,0,0" SelectionUnit="FullRow" SelectionChanged="deckGrid_SelectionChanged">
<DataGrid.Columns >
<DataGridTemplateColumn Width="70" >
<DataGridTemplateColumn.HeaderTemplate >
<DataTemplate>
<CheckBox Name="ckbSelectedAll" IsThreeState="True" Margin="10,0,0,0" IsChecked="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:DeckDefinition}, Path=AllSelected}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Unchecked">
<i:InvokeCommandAction Command="{x:Static local:DeckDefinition.UnCheckedCommand}"/>
</i:EventTrigger>
<i:EventTrigger EventName="Checked">
<i:InvokeCommandAction Command="{x:Static local:DeckDefinition.CheckedCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</CheckBox>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate >
<DataTemplate>
<CheckBox IsChecked="{Binding IsChecked, UpdateSourceTrigger=PropertyChanged}" Name="cbkSelect" Margin="10,0,0,0" Checked="CheckedTest"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="{lex:LocText Key=name, Dict=general, Assembly=KillCardMain}" Binding="{Binding Path=Name}" ></DataGridTextColumn>
<DataGridTemplateColumn HeaderStyle="{StaticResource CollapsedHeaderStyle}" CellStyle="{StaticResource NoBackgroundCellStyle}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Width="32" Style="{DynamicResource NoBackgroundButtonStyle}" Click="DeleteRowBtnClicked">
<Image Source="/KillCardMain;component/Resources/Images/delete.png" Width="16"></Image>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn HeaderStyle="{StaticResource CollapsedHeaderStyle}" CellStyle="{StaticResource NoBackgroundCellStyle}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Width="32" Style="{DynamicResource NoBackgroundButtonStyle}">
<Image Source="/KillCardMain;component/Resources/Images/edit.png" Width="16"></Image>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
背后的代碼
private void CheckedTest(object sender, RoutedEventArgs e) {
int index = deckGrid.SelectedIndex;
DataGridRow row = (DataGridRow)deckGrid.ItemContainerGenerator.ContainerFromIndex(index);
row.IsSelected = true;
}
DataGrid 的標准選擇功能是 select 只要單擊一行,就只選擇新行,除非按下 Ctrl 或 Shift。 聽起來您希望僅通過是否選中這些復選框來控制選擇過程,但是您將不得不以某種方式禁用 DataGrid 的所有正常選擇行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.