如何在WPF Datagrid中禁用单元格编辑?

137

我正在构建一个Windows Presentation Foundation中的数据网格,遇到了一个问题。当用户双击我的数据网格中的单元格时,单元格会进入编辑模式。我想阻止这种情况。相反,我希望用户能够选择整行 - 而不是编辑其中的值。

如何使双击选择整行而不是将点击的单元格置于编辑模式?

5个回答

302

WPF的DataGrid有一个IsReadOnly属性,您可以将其设置为True,以确保用户无法编辑您的DataGrid单元格。

您还可以根据需要为DataGrid中的单独列设置此值。


3
网格变灰且看起来更像是禁用状态,与winforms中的只读状态不太相似。 - Buda Florin
5
我赞同Buda Florin的观点。将其设置为只读会让它看起来更像是被禁用了。禁用和只读是不同的,因为只读通常允许您选择文本进行复制。当您将DataGrid设置为只读时,您将无法再选择单元格中的文本。 - Nick
4
@LeslieDavies 如果我想保持它们被禁用,但是当我按DEL键时也想能够从数据表格中删除项目,该怎么办? - Roxy'Pro
1
@Roxy'Pro,我有同样的问题。你找到解决方案了吗? - Patrick

51

DataGrid有一个XAML属性IsReadOnly,你可以将它设置为true:

<my:DataGrid
    IsReadOnly="True"
/>

9

我在评论中看到有用户想要禁用单元格编辑,但又允许删除行:我通过将所有列分别设置为只读来实现这一点,而不是仅仅禁用 DataGrid 本身。

<DataGrid IsReadOnly="False">
    <DataGrid.Columns>
        <DataGridTextColumn IsReadOnly="True"/>
        <DataGridTextColumn IsReadOnly="True"/>
    </DataGrid.Columns>
</DataGrid>

4

如果您想禁用整个网格的编辑,可以将IsReadOnly属性设置为true。 如果您想禁止用户添加新行,则设置CanUserAddRows属性为“False”。

<DataGrid IsReadOnly="True" CanUserAddRows="False" />

此外,您可以在各列上设置IsReadOnly以禁用编辑。


1

如果你绑定到一个 ObservableCollection<T>,并且你的 DataGrid 设置了 AutoGenerateColumns="True",因为你不想在 XAML 中处理单个列定义,那么似乎可以使用来自 System.ComponentModelReadOnlyAttribute

using System.ComponentModel;

public class SomeObject
{
    public bool ClickableCheckboxColumn { get; set; } = true;
    [ReadOnly(true)]
    public string UneditableTextColumn { get; set; } = string.Empty;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接