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

时间:2016-10-08 17:07:46

标签: wpf data-binding datagridview datagrid wpfdatagrid

我绑定到通用DataTable,其中某些行可能包含问题,不应修改。通过IsEnabled中的DataGrid_LoadingRowTriggerBinding的{​​{1}}进行简单设置,似乎可以轻松实现这一目标。 但是,我还有一个“Info”-Column,其中有一个Button,以便用户可以查看问题...将IsEnabled设置为false也会禁用我的按钮... 我已经尝试过:XAML但这没有效果。 我怎么能做到这一点?通过遍历IsManipulationEnabled的{​​{1}}并为除第一个之外的所有单元格设置VisualTree,这是唯一的方法吗?

1 个答案:

答案 0 :(得分:1)

对于第一列,请使用此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属性的继承。