2011-03-24 66 views
1

我有一個業務規則的屏幕顯示一些基於業務數據的字段,並不顯示其他。然後,我玩可見性來顯示/隱藏它們。如何強制WPF重新驗證控件?

我的業務對象實現了IDataErrorInfo。

我遇到的問題是,有些驗證僅適用於顯示字段時。

在這段代碼中提取,第一IF使得只有當type_account是內部驗證

string ValidateMinimumAmount() 
{ 

    if (this.type_account != "INTERNAL") 
     return null; 

    if (this.account_minimum==null) 
    { 
     return "You must provide a minimum amount"; 
    } 
    return null; 
} 

我的問題是,由於我的BO的初始狀態不是「內部」,那麼即使以後用戶選擇「內部」,驗證再也不會發生。

我如何「強制」驗證發生在第一次後。 當然,我已檢查,如果初始狀態是「內部」,那麼它的工作原理

+0

你可以發佈你的XAML嗎? – sthotakura 2013-09-14 05:23:05

回答

1

我建議你通過添加一個錯誤屬性來更加「正確地」通知錯誤。

這裏是一個非常可以理解的文章這幫助我,當我剛開始在WPF工作作爲一個初學者,你應該在這個看一看:

http://www.codeproject.com/KB/WPF/wpfvalidation.aspx

+0

你基本上告訴我擺脫IDataErrorInfo? – user96547 2011-03-24 09:02:08

+0

不,你應該實際使用它,正如我告訴過你的,這篇文章解釋了你使用字符串屬性不斷更新來實現它的一種簡單方法 – Damascus 2011-03-24 09:24:11

+0

我沒有在文章中看到持續更新的字符串。你能指點我到那裏嗎? – user96547 2011-03-24 13:42:55

1

你說你的「驗證」當你玩捉迷藏和放映時消失?但是您的IDataErrorInfo實現對象在再次顯示後仍然無效?

那麼它似乎只是一個ValidationErrorTemplate Adorner問題。我不知道您的XAML的樣子,但環繞你的容器與控制與AdornerDecorator

<AdornerDecorator> 
    <Yourcontainer with your Controls inside/> 
</AdornerDecorator> 

來驗證,如果這一招不解決您的問題發表您的XAML綁定和IDataErrorInfo的實施。

0

你的問題有點混亂。希望這個答案會有所幫助。

在你的例子中,如果賬戶類型是內部的,你需要最小的金額。這意味着MinimumAmount屬性的驗證狀態取決於AccountType的值。因此,只要AccountType發生變化,您就必須驗證MinimumAmount。因此:

public string AccountType 
{ 
    get { return _AccountType; } 
    set 
    { 
     if (_AccountType != value) 
     { 
     _AccountType = value; 
     OnPropertyChanged("AccountType"); 
     ValidateMinimumAmount(); 
     } 
    } 
} 

如果你有大量的屬性之間的相互依賴的,有時是最簡單的,只是實現整個對象Validate()方法,並調用它時,任何屬性更改。不要因爲任何時候一個屬性發生變化而重新驗證整個對象效率低下的想法而陷入困境。查看模型屬性通常只會響應用戶輸入而改變,除非您的方法需要大量時間來運行,否則這個可能性會非常小,因此會成爲問題。