Laden...

CheckBox an Bool-Variable binden

Erstellt von CWolle vor 6 Jahren Letzter Beitrag vor 6 Jahren 3.160 Views
CWolle Themenstarter:in
57 Beiträge seit 2012
vor 6 Jahren
CheckBox an Bool-Variable binden

ich möchte einige WPF-Elemente an Werte aus einem Array binden. Mit TextBox und DatePicker klappt auch alles, aber ich komme einfach nicht drauf, wie ich eine CheckBox an einen Bool-Wert binden kann.
Ich habs schon mit DataContext, Checked und IsChecked probiert! Die CheckBox bleibt immer leer - wie kann man eine Bindung an eine Boolean-Variable realisieren?

OO gibts seit Platon - hatte der auch C#?

16.806 Beiträge seit 2008
vor 6 Jahren

Und Google oder die Dokumentation hat dazu nichts ausgespuckt?

IsSelected IsChecked ist die richtige Eigenschaft.

1.040 Beiträge seit 2007
vor 6 Jahren

IsChecked funktioniert einwandfrei.

<CheckBox Grid.Row="0" IsChecked="{Binding TrueValue}" />
<CheckBox Grid.Row="1" IsChecked="{Binding FalseValue}" />
<CheckBox Grid.Row="2" IsChecked="{Binding NullableValue}" IsThreeState="True" />
public TestViewModel()
{
	TrueValue = true;
	FalseValue = false;
	NullableValue = null;
}

public bool FalseValue...

public bool? NullableValue...

public bool TrueValue...

Du kämpfst wahrscheinlich an anderer Stelle mit Binding-Fehlern. Informationen dazu findest du im Output.

IsSelected ist die richtige Eigenschaft.

Nö, diese Eigenschaft gibt es bei einer WPF-Checkbox nicht. 👅

CWolle Themenstarter:in
57 Beiträge seit 2012
vor 6 Jahren

Danke für den Hinweis, ich habs weiter probiert und die Lösung gefunden:

die Bindung war schon zu Beginn korrekt erfolgt (Abfrage mit Debug), aber ich musste nochmal 'InitializeComponent()' aufrufen, damit die Ansicht der anfangs leeren CheckBox aktualisiert wurde.

OO gibts seit Platon - hatte der auch C#?

1.040 Beiträge seit 2007
vor 6 Jahren

Ähm, was? 🤔

Kannst du mal bitte zeigen, was du da machst?
InitializeComponent(); ist nur einmal im Konstruktor im Code-Behind notwendig.

CWolle Themenstarter:in
57 Beiträge seit 2012
vor 6 Jahren

ich habe dem DockPanel-Bereich den Frame (mit der CheckBox) nochmals erneut zugewiesen, damit sich die Ansicht aktualisiert. So wird ja der Frame erneut geladen - was InitializeComponent() ausführt.


 Page p = new FrameX();
 haupt = p;
 // Checkbox in p aktualisiert, und jetzt die Page erneut zugewiesen
 haupt = p; 
 

Ich dachte, dass Änderungen an der Ausgabe automatisch angezeigt werden, aber es klappte doch nicht. Erst als ich dann Frame p erneut zuwies, wurde die Ansicht aktualisiert

OO gibts seit Platon - hatte der auch C#?

D
985 Beiträge seit 2014
vor 6 Jahren

Zeige doch bitte das ViewModel und die View.

Zu diesen Code-Fragmenten kann man gar nichts sagen, ausser, du musst da irgendwas falsch machen

5.657 Beiträge seit 2006
vor 6 Jahren

Hi CWolle,

wie kann man eine Bindung an eine Boolean-Variable realisieren?

Gar nicht! Man kann immer nur an Eigenschaften binden, nicht an Variablen. Da du am Rande erwähnst, daß die Werte in einem Array liegen, hilft dir evtl. [Artikel] MVVM und DataBinding weiter (Strg-F: ItemsControl bzw. ObservableCollection).

Weeks of programming can save you hours of planning