Tytuł pewnie trochę dziwny, ale po kolei.
Mam klasę
public class User
{
private string email;
public virtual string Email
{
get
{
return email;
}
set
{
string emailPattern = @"^(([^<>()[\]\\.,;:\s@\""]+" + @"(\.[^<>()[\]\\.,;:\s@\""]+)*)|(\"".+\""))@"
+ @"((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" + @"\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+" + @"[a-zA-Z]{2,}))$";
Regex emailValidator = new Regex(emailPattern);
if (!emailValidator.IsMatch(value))
throw new ArgumentException("Email", "Niepoprawny adres email");
email = value;
}
}
}
oraz obiekt tej klasy
<code class="c#">User user = new User();
Teraz mam formę, na której mam TextBoxa tbEmail. Robię dowiązanie do tego edita
tbEmail.DataBindings.Add("Text", user, "Login");
i wsio ok - dane się pokazują, jak zmienię w edicie to są zmiany w obiekcie user. Ale, no właśnie jest jedno ale - walidację mam na poziomie właściwości klasy i chciałbym, aby tak pozostało. I teraz jeśli dla tbEmail.CauseValidation mam na true to jeśli podam błędny email to nie pozwoli mi opuścić edita (nawet okienka się zamknąć nie da :) ) ale nie wyświetla żadnego komunikatu, nie generuje żadnego błędu, nic. Nie potrafię też znaleźć właściwości (metody, zdażenia, cokolwiek) co było by automatycznie wołane jeśli przypisanie czegoś do dowiązanej właściwości się nie uda - głupio to wygląda bo aplikacja ani me ani be tylko cały czas wraca do edita. Natomiast jeśli mam tbEmail.CauseValidation na false to mogę sobie sam walidować dane ale wtedy muszę przepisać kod do sprawdzania poprawności czyli mamy walidację w kilku miejscach co jest brzydkie i może prowadzić do tego, że w różnych miejscach będzie różna walidacja