I dont Know why "Regex.IsMatch(viewmodel.Email, @"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$)" gets fail.
Mismatched brackets.
The expression you pass to Regex contains a spurious ')' at the end which the expression evaluator doesn't understand.
But...I wouldn't use a regex for this: you can get long TLDs which don;t fit in three of four characters: ".museum" for example, so restricting TLD to 2 or 4 characters is a bad idea. Also, a domain can contain '.' as either part of the name: "mobile.mydomain.com" or part of the "country code": "mydomain.co.uk" so you need to allow for that.
Microsoft recommend using the
MailAddress Class (System.Net.Mail)[
^] constructor to check for valid names:
How to: Verify that Strings Are in Valid Email Format[
^] - see the NOTE section.