Como posso desabilitar a edição de células em um Datagrid WPF?

116

Estou construindo um datagrid no Windows Presentation Foundation e estou com um problema. Quando um usuário clica duas vezes em uma célula em meu datagrid, a célula entra no modo de edição. Eu quero evitar isso. Em vez disso, quero que os usuários possam selecionar a linha inteira - não editar valores nela.

Como posso fazer com que cliques duplos selecionem a linha inteira em vez de colocar a célula clicada no modo de edição?

Pouyan
fonte

Respostas:

254

O WPF DataGridtem uma IsReadOnlypropriedade que você pode definir Truepara garantir que os usuários não possam editar suas DataGridcélulas.

Você também pode definir esse valor para colunas individuais em seu, DataGridconforme necessário.

Leslie Davies
fonte
1
A grade está acinzentada e parece mais em um estado desativado - não se parece com o estado somente leitura dos winforms.
Buda Florin
3
Eu concordo com Buda Florin. Configurá-lo como ReadOnly faz com que pareça mais que está desativado. Disabled e ReadOnly são diferentes porque ReadOnly normalmente permite que você selecione o texto para cópia. Quando você define o DataGrid como ReadOnly, não pode mais selecionar texto nas células.
Nick
2
@LeslieDavies e se eu quiser mantê-los desabilitados, mas também quiser poder remover itens da grade de dados ao pressionar DEL?
Roxy'Pro
@ Roxy'Pro, tenho a mesma pergunta. Você encontrou uma solução?
Patrick
45

O DataGrid tem uma propriedade XAML IsReadOnlyque você pode definir como true:

<my:DataGrid
    IsReadOnly="True"
/>
Stephen
fonte
3

Se você deseja desativar a edição de toda a grade, pode definir IsReadOnly como verdadeiro na grade. Se você deseja desabilitar o usuário para adicionar novas linhas, defina a propriedade CanUserAddRows = "False"

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

Além disso, você pode definir IsReadOnly em colunas individuais para desativar a edição.

VivekDev
fonte
2

Vejo usuários em comentários se perguntando como desabilitar a edição de células enquanto permite a exclusão de linhas: consegui fazer isso definindo todas as colunas individualmente para somente leitura, em vez do próprio DataGrid.

<DataGrid IsReadOnly="False">
    <DataGrid.Columns>
        <DataGridTextColumn IsReadOnly="True"/>
        <DataGridTextColumn IsReadOnly="True"/>
    </DataGrid.Columns>
</DataGrid>
Célia
fonte