Diskuze: WPF - problém se spuštěním validátoru po zobrazení okna/formuláře
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 9 zpráv z 9.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Nějak mi uniká smysl validace při otevření okna. Myslel jsem si, že hodnoty je třeba validovat při ukládání a ne při načítání, nebo proč ta validace tam je?
Jde o to, že zobrazím okno s textboxem do kterého je potřeba zadat číslo (ono tam toho je samozřejmě víc, tohle je jen pro zjednodušení). V textboxu musí být číslo různé od nuly. A validace tam je kvůli tomu, že ve chvíli kdy tam je zadaný nevalidní text, tak se textbox červeně podbarví a zakáže se tlačítko "Uložit". No a problém je v tom že to je nabindované na Int64 který má jako defaultní hodnotu 0. V praxi to tedy vypadá tak, že se otevře okno s textboxem ve kterém je hodnota 0, ale vzhledem k tomu že neproběhla validace, tak to uživatel může uložit (není zakázané tlačítko Uložit ani podbarvaný textbox). Vím že bych to mohl ošetřit např. tak, že bych mohl defaultně zakázat to tlačítko na ukládání, ale to mi nepříjde moc pěkný a navíc by mě zajímalo proč se to takhle chová.
A není jednodušší místo textboxu použít NumericUpDown?
Validace je vázaná na akci - u tebe na TextInput, takže zkus ve Window_loaded dát za datacontext
txtMynumber.Text = "0";
Ono se nejedná jen o čísla a částky, těch validací tam je hromada, např. rodná čísla, emaily, telefonní čísla + nějaké interní speciální označení které musejí odpovídat specifickému formátu atd. Ten příklad s číslem byl jen pro ilustraci.
Aha... A když ti ta validace funguje při tučním zadávání, nestačilo by tu validaci spustit na událost stisku tlačítka (v podstatě jakoby kontrola před uložením)?
Díky, tohle funguje Ale stejně by mě zajímalo jestli nejde nějak docílit toho, aby se ten validátor zavolal automaticky po bindingu.
To by asi stačilo díky
Problém byl v tom že jsem nemohl přijít na to jak tu validaci spustit
ručně, resp. moc to nefungovalo.
Funguje je mi když to zavolám takhle:
txtMyNumber.GetBindingExpression(TextBox.TextProperty).UpdateSource();
Zobrazeno 9 zpráv z 9.