2015-11-01 19 views
1

我綁定TextBox.Text到int屬性整數屬性:WPF綁定的TextBox沒有拋出異常

<TextBox Text="{Binding Lines, UpdateSourceTrigger=PropertyChanged}" /> 

private int _lines = 10; 
public int Lines 
{ 
    get { return _lines; } 
    set { _lines = value; } 
} 

一切如預期這個簡單的代碼工作,有一個文本框,甚至驗證。然而,在輸出日誌中拋出異常System.FormatException。我的問題是:
有沒有優雅的方式擺脫例外,而幾乎沒有重新實現一切我自己?
通過我所說的一切,我的意思是驗證者,轉換器等簡單噸代碼不做任何事情,只是撥打Int32.TryParse而不是Int32.Parse。不是wpf拋出和處理的異常將是一個大問題,但完整的日誌使得發現實際問題變得更加困難。

+1

你可以防止用戶輸入無效值 – Domysee

+0

@Domysee你的意思是像處理textChanged和回滾字段,如果它不能被解析?我想這可以工作 - 不完全一樣的行爲,但它可以。 – wondra

+0

確切地說,我會處理PreviewKeyDown事件,並取消它的無效鍵,但原則上它是相同的 – Domysee

回答

1

問題並不清楚,但我認爲您指的是如果用戶輸入無效文本(即非數字,非整數數據)時發生的異常。

AFAIK,WPF不包含限制用戶輸入的內置控件。所以你的選擇是:

+0

嗯..我的問題的重點是 - 如果有默認轉換包括整數驗證爲什麼它會拋出異常。如果沒有很多努力,這個例外有一個解決方法 - 答案是沒有也是有效的答案(現在我可以忍受它,但它讓我困惑不已) – wondra

+0

@wondra:_「如果有默認轉換,包括驗證「_ - 是否存在?這取決於你的意思是「驗證」;對我來說,這意味着用戶反饋和禁用相關控件(例如「OK」按鈕)。你什麼意思?爲什麼應該定義排除拋出異常的可能性,因爲捕獲並處理拋出的異常是實現驗證的有效技術? –

+0

@wondra:_「如果沒有很多努力就有這種異常的解決方法」_ - 再次,是嗎?這取決於「解決方法」和「很多努力」的含義。例如,我個人認爲在我的答案中提到的「System.Windows.Forms.MaskedTextBox」變通辦法是「非常努力」。如果沒有_precisely_定義您的條款和條件,就不可能知道哪些答案會解決這些條款和條件。 –