Ich habe ein DataGrid mit der ersten Spalte als Textspalte und der zweiten Spalte als CheckBox-Spalte. Was ich will ist, wenn ich das Kontrollkästchen anklicke. Es sollte überprüft werden.
Die Auswahl dauert jedoch zwei Klicks. Beim ersten Klick wird die Zelle ausgewählt, beim zweiten Klick wird das Kontrollkästchen aktiviert. So aktivieren Sie das Kontrollkästchen, um mit einem einzigen Klick aktiviert / deaktiviert zu werden.
Ich benutze WPF 4.0. Spalten im DataGrid werden automatisch generiert.
wpf
datagrid
wpfdatagrid
Prinz Ashitaka
quelle
quelle
Antworten:
Für das Single-Click-Kontrollkästchen DataGrid können Sie einfach das reguläre Kontrollkästchen steuern
DataGridTemplateColumn
und festlegenUpdateSourceTrigger=PropertyChanged
.quelle
DataGridTemplateColumn.CellTemplate
mit Ihrer eigenen Bindung verwenden und es wird funktionieren !! Die Antwort von @ weidian-huang hat mir geholfen, das zu verstehen, danke!Ich habe dies mit folgendem Stil gelöst:
Es ist natürlich möglich, dies für bestimmte Spalten weiter anzupassen ...
quelle
Zunächst weiß ich, dass dies eine ziemlich alte Frage ist, aber ich dachte immer noch, ich würde versuchen, sie zu beantworten.
Ich hatte vor ein paar Tagen das gleiche Problem und fand eine überraschend kurze Lösung dafür (siehe diesen Blog ). Grundsätzlich müssen Sie lediglich die
DataGridCheckBoxColumn
Definition in Ihrer XAML durch Folgendes ersetzen :Der Vorteil dieser Lösung liegt auf der Hand - sie ist nur für XAML verfügbar. Auf diese Weise wird verhindert, dass Sie Ihren Code-Back mit zusätzlicher UI-Logik belasten, und Sie können Ihren Status in den Augen von MVVM-Eiferern beibehalten;).
quelle
Um Konstantin Salavatov Antwort mit der Arbeit
AutoGenerateColumns
, fügen Sie einen Event - Handler auf denDataGrid
‚sAutoGeneratingColumn
mit dem folgenden Code:Dadurch können alle
DataGrid
automatisch generierten Kontrollkästchenspalten mit einem Klick bearbeitet werden.quelle
Basierend auf einem Blog, auf das in Goblins Antwort verwiesen wird, das jedoch so geändert wurde, dass es in .NET 4.0 und im Zeilenauswahlmodus funktioniert.
Beachten Sie, dass es auch die Bearbeitung von DataGridComboBoxColumn beschleunigt - indem Sie in den Bearbeitungsmodus wechseln und Dropdown-Listen bei Einzelklick oder Texteingabe anzeigen.
XAML:
Code-Behind:
quelle
Ich habe diese Vorschläge ausprobiert und viele andere, die ich auf anderen Websites gefunden habe, aber keiner von ihnen hat für mich ganz funktioniert. Am Ende habe ich die folgende Lösung erstellt.
Ich habe mein eigenes DataGrid-geerbtes Steuerelement erstellt und einfach diesen Code hinzugefügt:
Was macht das alles?
Nun, jedes Mal, wenn wir auf eine Zelle in unserem DataGrid klicken, sehen wir, ob die Zelle ein CheckBox-Steuerelement enthält. Wenn dies der Fall ist , setzen wir den Fokus auf diese CheckBox und schalten ihren Wert um .
Dies scheint für mich zu funktionieren und ist eine schöne, leicht wiederverwendbare Lösung.
Es ist enttäuschend , dass wir brauchen , um Code schreiben dies aber zu tun. Die Erklärung, dass der erste Mausklick (auf das Kontrollkästchen eines DataGrid) "ignoriert" wird, da WPF die Zeile damit in den Bearbeitungsmodus versetzt, mag logisch klingen, aber in der realen Welt widerspricht dies der Funktionsweise jeder realen Anwendung.
Wenn ein Benutzer ein Kontrollkästchen auf seinem Bildschirm sieht, sollte er einmal darauf klicken können, um es anzukreuzen / zu deaktivieren. Ende der Geschichte.
quelle
Hier gibt es eine viel einfachere Lösung.
Wenn Sie
DataGridCheckBoxColumn
zum Implementieren verwenden, dient der erste Klick zum Fokussieren und der zweite Klick zum Überprüfen.Für die
DataGridTemplateColumn
Implementierung ist jedoch nur ein Klick erforderlich.Der Unterschied zwischen Verwendung
DataGridComboboxBoxColumn
und Implementierung durchDataGridTemplateColumn
ist ebenfalls ähnlich.quelle
Ich habe damit gelöst:
Das Kontrollkästchen ist mit einem Klick aktiv!
quelle
Basierend auf Jim Adornos Antwort und Kommentaren zu seinem Beitrag ist dies eine Lösung mit
MultiTrigger
:quelle
Eine weitere einfache Lösung besteht darin, diesen Stil zu Ihrer DataGridColumn hinzuzufügen. Der Textkörper Ihres Stils kann leer sein.
quelle
quelle