c# - 在 WPF 中使用 Datagrid 使用复选框进行多项选择

标签 c# wpf mvvm checkbox datagrid

我想知道如何使用 DataGridCheckBoxColumn 选择多行。

在这里我只能选择一行,但是如何进行多选。

我的 XAML 如下:

<UserControl.Resources>
    <Style x:Key="itemstyle" TargetType="{x:Type DataGridRow}">
        <Style.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightGoldenrodYellow" />
            <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
            <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Black" />
        </Style.Resources>
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        <Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" />
        <Style.Triggers>
            <MultiTrigger>
                <MultiTrigger.Conditions>
                    <Condition Property="ItemsControl.AlternationIndex" Value="1" />
                    <Condition Property="IsSelected" Value="False" />
                    <Condition Property="IsMouseOver" Value="False" />
                </MultiTrigger.Conditions>
                <Setter Property="Background" Value="#EEEEEEEE" />
            </MultiTrigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>

<Grid Width="500" Height ="300">
    <DataGrid ItemsSource="{Binding Path=Script}" HeadersVisibility="Column" SelectionMode="Single" AlternatingRowBackground="Gainsboro" Background="White" AutoGenerateColumns="False" ItemContainerStyle="{StaticResource itemstyle}" CanUserAddRows="True" GridLinesVisibility="None" Height="242" HorizontalAlignment="Left" HorizontalContentAlignment="Left"  IsEnabled="True" IsReadOnly="True"   Margin="10,14,0,44" Name="dgMain" RowHeight="23" VerticalAlignment="Center" VerticalContentAlignment="Center"  Width="478" >
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseDoubleClick">
                <i:InvokeCommandAction Command="{Binding EditData}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
        <DataGrid.Columns>
            <DataGridCheckBoxColumn Binding="{Binding Path=IsSelected}" Header="Select" Width="50" />
            <DataGridTextColumn Binding="{Binding Path=Script_Text}" Header="Script" Width="400" />
        </DataGrid.Columns>
    </DataGrid>
</Grid>

谢谢

SN

最佳答案

你可以做到,归功于斯科特

https://blog.scottlogic.com/2008/11/26/multiselect-datagrid-with-checkboxes.html

诀窍是使用如下所示的 RowHeaderTemplate

<DataGrid ItemsSource="{Binding}">
    <DataGrid.RowHeaderTemplate>
      <DataTemplate>
         <Grid>
             <CheckBox IsChecked="{Binding Path=IsSelected, Mode=TwoWay,
                     RelativeSource={RelativeSource FindAncestor,
                      AncestorType={x:Type dg:DataGridRow}}}"/>
          </Grid>
</DataTemplate>

关于c# - 在 WPF 中使用 Datagrid 使用复选框进行多项选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19533356/

相关文章:

c# - WPF MVVM 更改模型

c# - 循环语句不超过第二项

c# - 为什么WPF文本框不支持三击全选文本

javascript - 如果与 bool 值的绑定(bind)未正确评估,则 knockout

c# - 在 WPF 中模拟母版页概念时出现逻辑错误

c# - 将事件从项目路由到MVVM中的集合

c# - 为什么 EventHandler 在以下 asp.net 代码中不触发?

c# - 从 Dynamics CRM API 返回什么 DateTime

wpf - VisualTreeHelper.GetChildren 找不到 TabItem 的子项

wpf - 用于新 WPF 项目的 Prism 和 MVVM