Wie kann ich die Bearbeitung von Zellen in einem WPF-Datagrid deaktivieren?

116

Ich erstelle ein Datagrid in Windows Presentation Foundation und habe ein Problem. Wenn ein Benutzer auf eine Zelle in meinem Datagrid doppelklickt, wechselt die Zelle in den Bearbeitungsmodus. Ich möchte das verhindern. Stattdessen möchte ich, dass Benutzer die vollständige Zeile auswählen und keine Werte darin bearbeiten können.

Wie kann ich dafür sorgen, dass Doppelklicks die gesamte Zeile auswählen, anstatt die angeklickte Zelle in den Bearbeitungsmodus zu versetzen?

Pouyan
quelle

Antworten:

254

Die WPF DataGridverfügt über eine IsReadOnlyEigenschaft, die Sie festlegen können, Trueum sicherzustellen, dass Benutzer die DataGridZellen Ihrer Person nicht bearbeiten können.

Sie können diesen Wert bei Bedarf auch für einzelne Spalten in Ihrem festlegen DataGrid.

Leslie Davies
quelle
1
Das Raster ist grau und sieht eher wie ein deaktivierter Zustand aus. Es ähnelt nicht dem schreibgeschützten Zustand der Winforms.
Buda Florin
3
Ich stimme Buda Florin zu. Wenn Sie ReadOnly einstellen, sieht es eher so aus, als wäre es deaktiviert. Deaktiviert und ReadOnly unterscheiden sich, da Sie mit ReadOnly normalerweise den zu kopierenden Text auswählen können. Wenn Sie das DataGrid auf ReadOnly setzen, können Sie keinen Text mehr in den Zellen auswählen.
Nick
2
@LeslieDavies Was ist, wenn ich sie deaktiviert lassen möchte, aber auch Elemente aus dem Datagrid entfernen möchte, wenn ich ENTF drücke?
Roxy'Pro
@ Roxy'Pro, ich habe die gleiche Frage. Haben Sie eine Lösung gefunden?
Patrick
45

Das DataGrid verfügt über eine XAML-Eigenschaft IsReadOnly, die Sie wie folgt festlegen können true:

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

Wenn Sie die Bearbeitung des gesamten Rasters deaktivieren möchten, können Sie IsReadOnly im Raster auf true setzen. Wenn Sie den Benutzer deaktivieren möchten, um neue Zeilen hinzuzufügen, legen Sie die Eigenschaft CanUserAddRows = "False" fest.

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

Außerdem können Sie IsReadOnly für einzelne Spalten festlegen, um die Bearbeitung zu deaktivieren.

VivekDev
quelle
2

Ich sehe Benutzer in Kommentaren, die sich fragen, wie die Zellenbearbeitung deaktiviert werden kann, während das Löschen von Zeilen zugelassen wird: Ich habe dies geschafft, indem ich alle Spalten einzeln so eingestellt habe, dass sie schreibgeschützt sind, anstatt das DataGrid selbst.

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