2016-09-08 87 views
0

我有一個看起來像二傳手代碼

[IsNumericValidation] 
[Range(0, 200)] 
[Required] 
public override int Threshold 
{ 
    get 
    { 
     return this._threshold; 
    } 
    set 
    { 
      //removed some code 
      base.OnPropertyChanged("Threshold"); 
     } 
    } 

而在我的XAML我有

<TextBox Margin="10" Text="{Binding Threshold, 
        UpdateSourceTrigger=PropertyChanged, 
        ValidatesOnDataErrors=True }" 
         /> 

我加了一個屬性當我在文本框中輸入一個數字值時,一切按預期工作(並且設置者中的斷點被命中)。

當我在非數值類型(如字母d)斷點未命中。

我有一些額外的邏輯在我的二傳手,我也用ValidationAttribute有我自己的驗證規則。

雖然我覺得一個選擇是改變類型,所以Thresholdstring,這似乎hacky!

我只能假設斷點不打的原因是由於一些額外的誤差通過WPF檢查完成的,我的問題是,如果我的假設是正確的,我可以把它關閉這個控制?

回答

1

設置器不打,因爲屬性沒有改變。驗證器將阻止該值傳遞。即使被擊中,二傳手就不能稱其爲有會是一個例外,而調用屬性的setter - 一個d不能轉換到合適的int

+0

啊......我明白了......所以,在這種情況下,我想選擇* *是有它的類型'string'並進行必要的轉換/鑄造的,當我需要 – MyDaftQuestions

+0

嘛,你怎麼了期望「d」被作爲「int」屬性的輸入來處理?您可能希望使用類型轉換器來轉換'string'和'int'之間的所有有效值,反之亦然。如果您只想允許數字值,請使用驗證程序,在輸入無效時向用戶提供視覺反饋。 –

+0

我期望如果用戶輸入'd',我寫的驗證控件就會啓動並通知用戶它是無效的......當然,值('d')必須存儲在某處(我猜屬性可能是'object'類型)。我沒有想到它通過那麼遠,我只關注*它沒有設置,而不是*爲什麼*它沒有設置。感謝您的明確回答 – MyDaftQuestions