wpf DataGrid 禁用除第一列以外的特定行的单元格编辑

wpf DataGrid disable cell edit for specific row except first column

我有一个通用 DataTable 的绑定,其中某些行可能包含问题,不应修改。似乎有一种非常简单的方法可以通过在 DataGrid_LoadingRow 中设置 IsEnabled 或在 XAML 中设置 TriggerBinding 来实现。 但是,我还有一个“信息”列,其中有一个按钮,以便用户可以查看问题……将 IsEnabled 设置为 false 也会禁用我的按钮…… 我已经尝试过:IsManipulationEnabled 但这没有效果。 我怎样才能做到这一点?唯一的方法是遍历 DataRowViewVisualTree 并为除第一个以外的所有单元格设置 IsEnabled 吗?

对于您的第一列,请使用此 Button

public class EnabledButton : Button
{
    static EnabledButton()
    {
        UIElement.IsEnabledProperty.OverrideMetadata(typeof(EnabledButton),
                new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.None,
                    UIElement.IsEnabledProperty.DefaultMetadata.PropertyChangedCallback,
                    new CoerceValueCallback(IsEnabledCoerceCallback)));
    }

    private static object IsEnabledCoerceCallback(DependencyObject d, object baseValue)
    {
        return (bool)baseValue;
    }
}

用法:

<DataGrid.Columns>
    <DataGridTemplateColumn>
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <local:EnabledButton IsEnabled="True" Content="Modify"/>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
    ...
</DataGrid.Columns>

这会覆盖 DataGridCell.IsEnabled 属性 的继承。