Mam DataGrid z pierwszą kolumną jako kolumną tekstową i drugą kolumną jako kolumną CheckBox. Chcę, jeśli kliknę pole wyboru. Powinien zostać sprawdzony.
Ale wybranie wymaga dwóch kliknięć, przy pierwszym kliknięciu komórka jest wybierana, przy drugich kliknięciach pole wyboru jest zaznaczane. Jak sprawić, by pole wyboru było zaznaczane / odznaczane za pomocą jednego kliknięcia.
Używam WPF 4.0. Kolumny w DataGrid są generowane automatycznie.
wpf
datagrid
wpfdatagrid
Książę Ashitaka
źródło
źródło
Odpowiedzi:
W przypadku pojedynczego kliknięcia pola wyboru DataGrid możesz po prostu umieścić zwykłą kontrolkę pola wyboru w środku
DataGridTemplateColumn
i ustawićUpdateSourceTrigger=PropertyChanged
.źródło
DataGridTemplateColumn.CellTemplate
z własnego oprawy i będzie działać !! Odpowiedź @ weidian-huang pomogła mi to zrozumieć, dzięki!Rozwiązałem to za pomocą następującego stylu:
Oczywiście możliwe jest dalsze dostosowanie tego do określonych kolumn ...
źródło
Po pierwsze, wiem, że to dość stare pytanie, ale nadal myślałem, że spróbuję na nie odpowiedzieć.
Kilka dni temu miałem ten sam problem i znalazłem zaskakująco krótkie rozwiązanie (patrz ten blog ). Zasadniczo wszystko, co musisz zrobić, to zastąpić
DataGridCheckBoxColumn
definicję w XAML następującą:Zaleta tego rozwiązania jest oczywista - obsługuje tylko XAML; w ten sposób skutecznie powstrzymuje cię od obciążania twojego kodu z powrotem dodatkową logiką UI i pomaga ci utrzymać swój status w oczach zelotów MVVM;).
źródło
Aby odpowiedź Konstantina Salavatova działała z
AutoGenerateColumns
, dodaj procedurę obsługi zdarzeń doDataGrid
'sAutoGeneratingColumn
z następującym kodem:Dzięki temu wszystkie
DataGrid
automatycznie generowane kolumny pól wyboru będą dostępne do edycji „jednym kliknięciem”.źródło
Na podstawie bloga, do którego odwołuje się odpowiedź Goblin, ale zmodyfikowany do pracy w .NET 4.0 i trybie zaznaczania wierszy.
Zauważ, że przyspiesza również edycję DataGridComboBoxColumn - poprzez wejście w tryb edycji i wyświetlenie listy rozwijanej po jednym kliknięciu lub wprowadzeniu tekstu.
XAML:
Za kodem:
źródło
Wypróbowałem te sugestie i wiele innych, które znalazłem na innych stronach, ale żadna z nich nie działała dla mnie. W końcu stworzyłem następujące rozwiązanie.
Utworzyłem własną kontrolkę odziedziczoną po DataGrid i po prostu dodałem do niej następujący kod:
Co to wszystko robi?
Cóż, za każdym razem, gdy klikamy dowolną komórkę w naszym DataGrid, sprawdzamy, czy komórka zawiera w sobie kontrolkę CheckBox. Jeśli to robi , wtedy będziemy ustawić ostrość na tym CheckBox i przełączania jego wartość .
Wydaje mi się, że to działa i jest przyjemnym rozwiązaniem, które można łatwo wykorzystać ponownie.
To rozczarowujące, że my potrzebujemy do zapisu kodu to zrobić chociaż. Wyjaśnienie, że pierwsze kliknięcie myszą (na polu CheckBox DataGrid) jest „ignorowane”, ponieważ WPF używa go do przestawienia wiersza w tryb edycji, może wydawać się logiczne, ale w rzeczywistości jest to sprzeczne ze sposobem działania każdej prawdziwej aplikacji.
Jeśli użytkownik widzi pole wyboru na swoim ekranie, powinien móc je raz kliknąć, aby zaznaczyć / odznaczyć. Koniec opowieści.
źródło
Jest tutaj znacznie prostsze rozwiązanie.
Jeśli używasz
DataGridCheckBoxColumn
do implementacji, pierwsze kliknięcie służy do skupienia, a drugie do sprawdzenia.Ale użycie
DataGridTemplateColumn
do wdrożenia wymaga tylko jednego kliknięcia.Różnica między użyciem
DataGridComboboxBoxColumn
a implementacją przezDataGridTemplateColumn
jest również podobna.źródło
Rozwiązałem to:
Pole wyboru aktywne po jednym kliknięciu!
źródło
Bazując na odpowiedzi Jima Adorno i komentarzach do jego postu, jest to rozwiązanie z
MultiTrigger
:źródło
Jeszcze innym prostym rozwiązaniem jest dodanie tego stylu do kolumny DataGridColumn. Treść stylu może być pusta.
źródło
źródło