2013-05-16 51 views
3

在我的應用程序中,我正在使用「validatesonnotifydataerrors」以及「DataAnnotations」,以便在用戶正在編輯的字段爲空或者數據錯誤等情況下警告用戶。是當我的視圖顯示時,所有的文本框顯示警告,因爲它們是空的。我想要做的只是在用戶開始向該字段輸入不正確的數據或者刪除數據並且該字段變空時顯示警告。如何停止ValidatesOnNotifyDataErrors過於活躍

這裏是我的文本框之一的XAML:

<TextBox Text="{Binding Path=AttributeName, UpdateSourceTrigger=PropertyChanged, ValidatesOnNotifyDataErrors=true}" /> 

這裏是後盾屬性:

private string _attributeName; 
    [StringLength(128)] 
    [Required(ErrorMessage = "Field cannot be blank")] 
    public string AttributeName 
    { 
     get { return _attributeName; } 
     set 
     { 
      _attributeName = value; 
      IsDirty = true; 
      OnPropertyChanged("AttributeName"); 
     } 
    } 

就是我想做的事情可能與此框架?

+0

你是如何解決你的問題的?請問您可以添加您的解決方案,因爲我在類似的問題 – WiiMaxx

回答

2

如果您希望文本框不能直接顯示驗證,請刪除;

[Required(ErrorMessage = "Field cannot be blank")] 

然後包括一個RegularExpression而不是像下面這樣;

[RegularExpression(@"^[a-zA-Z''-'\s]{1,128}$", ErrorMessage = "AttributeName must contain no more then 128 characters and contain no digits.")] 
public string AttributeName 
{ 
    get { return _attributeName; } 
    set 
    { 
     _attributeName = value; 
     IsDirty = true; 
     OnPropertyChanged("AttributeName"); 
    } 
} 

然後,正則表達式中,你可以添加或刪除某些方面,這樣的文本框不允許數字,符號等

你可能注意到了,您可以添加字符串的AA範圍包含像這樣的{1,128}(它從1個字母到128,之後它會在文本框中顯示爲紅色),因此理論上你不需要包含[StringLength(128)]

有關數據註釋/屬性驗證的更多信息,請參見This link。也看看This link also

希望這有助於:)。

+0

不起作用。如果我添加文本,然後刪除它我沒有得到警告,該字段是空的。我已經驗證了正則表達式,並且知道當字段爲空時它不會返回任何內容,所以我會期望這會跳出警告。 – Retrocoder

+0

那麼,從你的問題你想要的文本框不包含驗證,直到用戶添加不正確的數據,是否正確?所以在此基礎上,正則表達式應該在理論上起作用。除非我誤解了這個問題:/。這可能與你的風格有關,否則用於驗證。 –

+0

我稍微修改了我的問題,使其更清楚,即「錯誤」的數據,這也意味着一個空的領域。 – Retrocoder