Laden...

Mehrere Checkboxen nach Eigenschaft:".IsChecked" abfragen

Erstellt von SharpLat vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.967 Views
S
SharpLat Themenstarter:in
7 Beiträge seit 2019
vor 5 Jahren
Mehrere Checkboxen nach Eigenschaft:".IsChecked" abfragen

Hallo, C#-Community,
zuerst einmal muss ich sagen, dass ich ein C#-Anfänger bin.

Nun zur meiner Frage bzw. meinem Problem:
Ich habe 10 Checkboxes und diese möchte ich alle nach der .IsChecked - Eigenschaft abfragen, um darauf ein Array mit ausgewählten Zahlen zu füllen.

Ich habe eine Lösung über eine einfache if-Anweisung gefunden, die ist aber extrem lang und um ehrlich zu sein "unschön". Die Checkboxes wurden in XAML einzeln erstellt:

<CheckBox x:Name="check1" Content="Lektion 1" HorizontalAlignment="Left" Margin="62,68,0,0" VerticalAlignment="Top"/>

also nach diesem Beispiel.

int[] ins = new int[9];
            if (check1.IsChecked == true)
            {
                ins[0] = 1;
            }
            else
            {
                ins[0] = 0;
            }
            if (check2.IsChecked == true)
            {
                ins[1] = 2;
            }
            else
            {
                ins[1] = 0;
            }

Die im Codebeispiel gezeigten Einheiten (logischerweise ohne die Deklaration und Initialisierung des Arrays) wurden für jede einzelne -der 10 Checkboxes- erstellt, was echt viel (unnützen?) Code mit sich bringt.
Deswegen frage ich mich bzw. euch, ob man das auch durch eine Schleife oder Ähnliches/Anderes lösen kann?
Ich erwarte hier -gemäß der Regeln- auch keine vollendete Lösung und bin dankbar für jeden Tipp, da ich nach langer Suche im Internet und auch mit der Benutzung der "Suchen-Funktion" keine Ergebnisse fand.

16.806 Beiträge seit 2008
vor 5 Jahren

In WPF und XAML solltest Du immer mit dem MVVM Pattern und Datenbindung arbeiten - immer.
Das gesamte Konzept von WPF basiert darauf. Und Du hast richtig erkannt: Du brauchst sehr viel Code, wenn Du dies nicht machst - hinzu kommen unzählige Workarounds, die benötigt werden.

[Artikel] MVVM und DataBinding

Das Problem würde sich bei MVVM gar nicht erst ergeben.

S
SharpLat Themenstarter:in
7 Beiträge seit 2019
vor 5 Jahren

Danke, für deine Antwort.
Werde mich in das Thema MVVM direkt mal einlesen.

187 Beiträge seit 2009
vor 5 Jahren

So könnte man es machen. Willst du nur angewählte Checkboxen filtern, dann kannst Du im Lambda die Kommentarzeichen entfernen.
Im Xaml habe ich den Checkboxen in der Tag-Eigenschaft je einen Wert zugewiesen, der dann in der Schleife für die Nummer und den Array Index herangezogen wird.
Die Checkboxen liegen bei mir im Xaml in einem Stackpanel mit Namen stack - Variable im Lambda


int[] ins = new int[9];
            var checkBoxes = stack.Children.OfType<CheckBox>();//.Where(cb => cb.IsChecked ?? false);

            foreach (CheckBox checkbox in checkBoxes)
            {
                int number = int.Parse((string)checkbox.Tag);
                int index = number--;
                if (checkbox.IsChecked.HasValue && checkbox.IsChecked.Value)
                {
                    ins[index] = number;
                }
                else
                {
                    ins[index] = 0;
                }
            }

C
2.121 Beiträge seit 2010
vor 5 Jahren

Und bitte angewöhnen das "== true" wegzulassen, denn es genügt zu schreiben "wenn die Box gecheckt ist", statt "wenn es wahr ist dass die Box gecheckt ist" 😉

2.207 Beiträge seit 2011
vor 5 Jahren

Siehe auch [Tipp] Anfängerhinweis == true / == false

Gruss

Coffeebean

S
SharpLat Themenstarter:in
7 Beiträge seit 2019
vor 5 Jahren

Danke, für den Hinweis, chilic.
Ist mir bis jetzt tatsächlich noch gar nicht aufgefallen, macht ja aber doch Sinn.

S
SharpLat Themenstarter:in
7 Beiträge seit 2019
vor 5 Jahren

Vielen Dank, Cavemen, für deine Lösung.
Habe sie direkt mal ausprobiert und sie funktioniert - wie erwartet. 😉

Grüße

SharpLat