WPF数据网格IsReadOnly异常

本文关键字:IsReadOnly 异常 网格 数据网 数据 WPF | 更新日期: 2023-09-27 18:25:25

我有一个数据网格,在其中我添加了一个复选框列。我希望除了复选框列之外,整个数据网格都是IsReadOnly。我试过:

  <DataGrid x:Name="DataGridView_Customer_Information" HorizontalAlignment="Left" Margin="10,200,0,0" VerticalAlignment="Top" Height="410" Width="697" CanUserAddRows="False" IsReadOnly="True" >
        <DataGrid.Columns>
            <DataGridCheckBoxColumn x:Name="CheckBoxSelectRow" IsReadOnly="False"/>
        </DataGrid.Columns>
    </DataGrid>

但我可以想象<DataGridCheckBoxColumn x:Name="CheckBoxSelectRow" IsReadOnly="False"/>被前面的陈述推翻了。由于只有一列需要允许编辑(允许选中复选框),是否可以在IsReadOnly中进行预期?

感谢先进的

WPF数据网格IsReadOnly异常

您有两个选项。两者都假定DataGrid.AutoGenerateColumnsFalse

  1. DataGrid元素中删除IsReadOnly="True",并为每列设置IsReadOnlyDataGridCheckBoxColumnFalse,其余列为True

  2. IsReadOnly="True"保留为DataGrid,并在模板中添加DataGridTemplateColumnCheckBox,而不是DataGridCheckBoxColumn

    <DataGrid IsReadOnly="True" AutoGenerateColumns="False" ItemsSource="{Binding Guests}">
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="Is invited">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox IsChecked="{Binding IsInvited}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="False"/>
        </DataGrid.Columns>
    </DataGrid>
    

第二种方法还有另一个好处。DataGridCheckBoxColumn的默认行为很奇怪——要更改复选标记,需要先选择单元格,这很不方便。DataGridTemplateColumn中的CheckBox接受用户输入,而不需要选择单元格,这看起来很自然。

您可以将其他列的IsReadOnly设置为false

更新

或者您可以将添加到其他列的DataGrid.Resources样式中

<DataGrid.Resources>
    <Style TargetType="{x:Type DataGridTextColumn}">
        <Setter Property="IsReadOnly" Value="True" />
    </Style>
</DataGrid.Resources>