Laden...

TextBox Binging funktioniert nicht immer

Erstellt von Quaneu vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.280 Views
Quaneu Themenstarter:in
692 Beiträge seit 2008
vor 11 Jahren
TextBox Binging funktioniert nicht immer

Hallo zusammen,

jetzt hab ich noch ein Problem...

Ich habe eine TextBox:


<TextBox Text="{Binding PhysicalValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

Das Property sieht wie folgt aus:


private String _physicalValue;
public String PhysicalValue
{
	get { return this._physicalValue; }
	set
	{
		if (value == null)
		{
			throw new UnknownException("PhysicalValue can not be null.");
		}
		else
		{
			if (this._physicalValue != value)
			{
				Double doubleValue;
				this._physicalValue = value;
				if (Double.TryParse(this._physicalValue, out doubleValue))
				{
				        if (doubleValue > 100)
				        {
				                this._physicalValue = "100";
				        }
				}
				OnPropertyChanged("PhysicalValue");
			}
		}
	}
}

Das ganze funktioniert leider nicht immer. Wenn ich 123 eingebe wird der Text in der TextBox auf 100 zurückgesetzt (so wie gewünscht). Wenn ich nun aber aus 100 1000 mache bleibt der Text auf 1000... Warum updatet sich die TextBox nun nicht mehr?

Schöne Grüße
Quaneu

1.552 Beiträge seit 2010
vor 11 Jahren

Hallo Quaneu,

sieh dir mal die 2. Überladung von TryParse an. Dort kannst du explizit den Nummerntyp mitgeben. Denn es kann sein, dass es dadurch Probleme macht. Versuch auch zu debuggen, damit du siehst ob er bei 1000 bei Double.TryParse reinspringt oder nicht. Versuche verschidene Szenarien:*1000 *1.000 *1.000,00 *1,000 *1,000.00 *1,000,00 *1.000.00

Du wirst staunen welch andere Ergebnisse du erreichst. Dadurch lernst du den besseren Umgang mit Zahlen und wie die Konvertierung von String nach double funktioniert.

Gruß,
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

Quaneu Themenstarter:in
692 Beiträge seit 2008
vor 11 Jahren

Hallo Michael,

danke für deine Hilfe. Das Problem liegt nicht am TryParse, denn dieser funktioniert. Also ich komme schon in das if.


if (doubleValue > 100)
{
   this._physicalValue = 100;
}

Und auch in


  this._physicalValue = 100;

D.h. der Wert auf 100 zurückgesetzt, aber die TextBox bleibt auf 1000.

Schöne Grüße
Quaneu

5.657 Beiträge seit 2006
vor 11 Jahren
Double.TryParse(this._physicalValue, out doubleValue)

Du solltest evtl. nicht die _physicalValue parsen, sondern die value...

Edit: Hab übersehen, daß das ja alles Strings sind. Hast du mal einen Breakpoint in den Getter gesetzt , um zu schauen, ob der richtige Wert überhaupt abgefragt wird?

Christian

Weeks of programming can save you hours of planning

Quaneu Themenstarter:in
692 Beiträge seit 2008
vor 11 Jahren

Hallo Christian,

ja hab ich. Er kommt nach dem setter noch einmal in den getter und dort steht dann "100" drin (also this._physicalValue == "100").

Schöne Grüße
Gennaro

5.299 Beiträge seit 2008
vor 11 Jahren

komisch

    this._physicalValue = 100;

dürfte doch eiglich garnet kompilieren, denn _physicalValue ist doch String ?(

Der frühe Apfel fängt den Wurm.

1.346 Beiträge seit 2008
vor 11 Jahren

Warum mchst du aus dem Property überhaupt einen string und nicht direkt einen double?

Quaneu Themenstarter:in
692 Beiträge seit 2008
vor 11 Jahren

@ErfinderDesRades:
Da hast Du natürlich recht. Hab den Wert hier nur abgeändert und die "" vergessen. Konnte es hier leider nicht überall ändern, da mich die Seite dran hindert.

@pdelvo:
Da ich später mit IDataErrorInfo arbeiten will und wenn ich double nehme und der User in die TextBox abc eingibt, klappt das so nimmer.