我可以指定哪些列可在WPF DataGrid中编辑吗?

Rac*_*hel 6 wpf datagrid editing

我有一个带有AutoGenerated列的WPF 4.0 DataGrid.我想只允许用户编辑第一列.有这么简单的方法吗?

我试图添加一个DataGridCell样式并根据ColumnName(第一列总是具有相同的名称)或ColumnIndex设置它的编辑能力,但是我无法为此找出正确的XAML,或者即使它是可能的.

BMG*_*BMG 16

以下示例为一个或多个列提供了技巧

  private void Grid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
    {
        if (e.Column.Header.ToString() == "COLUMNNAME")
        {
            // e.Cancel = true;   // For not to include 
            // e.Column.IsReadOnly = true; // Makes the column as read only
        }

    } 
Run Code Online (Sandbox Code Playgroud)


Mac*_*ius 6

每列都有一个IsReadOnly属性.此外,整个DataGrid也具有IsReadOnly [这不会影响绑定,只会影响用户编辑字段的能力]

编辑:匆匆回答,抱歉.我只能猜测你不应该在可能的情况下自动生成列,这样你就可以控制哪些是只读的,哪个控制模板去哪里...只需使用列的Binding属性,这样你就不需要自动生成它们了.


Rac*_*hel 6

我明白了......这就是我用过的东西:

<DataGrid.Resources>
    <Style TargetType="{x:Type DataGridCell}">
        <Setter Property="IsEnabled" Value="False" />
        <Style.Triggers>
            <DataTrigger Value="PART_IsSelected" Binding="{Binding Path=Column.Header, RelativeSource={RelativeSource Self}}">
                <Setter Property="IsEnabled" Value="True" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</DataGrid.Resources>
Run Code Online (Sandbox Code Playgroud)

如果需要,可以使用Column.DisplayIndex而不是Column.Header

我仍然不确定为什么绑定不能直接工作并且需要被RelativeSource引用,但至少它可以工作:)