2016-01-29 68 views
0

我有一個模型,用於保存綁定到輸入表單的數據。此型號使用IDataErrorInfoINotifyPropertyChanged驗證其內容。我有一種方法將"(6*20+sin(20))"這樣的字符串轉換爲double的值。輸入此文本的文本框綁定到Mass.TextValue。但是,如果此值發生變化,它不會調用OnPropertyChanged()方法(如下所示),因此該值未經驗證,我如何解決此問題?使用IDataErrorInfo和INotifyPropertyChanged驗證自定義數據類型

private DynamicDouble mass = new DynamicDouble("Mass", 1); 
    public DynamicDouble Mass 
    { 
     get { return mass; } 
     set { mass = value; OnPropertyChanged("Mass"); } 
    } 

DynamicDouble類也使用INotifyPropertyChangedIDataErrorInfo以及和內部驗證的調用,但它是用於將stringdouble值,而不是用於檢查該值是否大於0的驗證(如果的質量)。我不能在DynamicDouble類中放置範圍檢查,因爲它不僅僅用於Mass屬性。

回答

0

的問題是通過將所有所需的驗證邏輯進入ViewModel類和添加屬性它,指向值模型本身並驗證輸入而不是做驗證下向下解決。

0

沒有一個好的Minimal, Complete, and Verifiable example這是不可能肯定地說問題是什麼。

然而,根據僅有的一些資料就在這裏,它似乎雖然沒有理由被稱爲OnPropertyChanged()方法,因爲Mass setter方法永遠不會被調用。如果唯一綁定的是Mass.TextValue,那麼唯一會改變的是TextValue屬性,而不是Mass屬性。

如果您想要在DynamicDouble類本身中進行驗證,那麼您應該編寫一個ValidationRule對象並將其附加到使用TextValue屬性作爲源的綁定。

或者,您的模型對象不應該直接暴露Mass對象,而應該實現MassTextValue並委託給DynamicDouble.TextValue屬性,根據需要執行附加驗證(當然,也可根據需要從DynamicDouble轉發驗證結果)。