2012-03-28 27 views
1

我有一個數據綁定NumericUpDown - 控制,勢必是這樣的:如何捕獲由數據綁定控件觸發的異常?

Binding b = new Binding("Value", myDataSource, "myProperty"); 
b.DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged; 
numericUpDown.DataBindings.Add(b); 

更改myProperty有一些進一步的影響,並可能某處拋出異常下降。

檢查是否拋出異常所需的一些信息在GUI中不可用,因此驗證輸入很困難。 我可以捕獲由我的DataBinding產生的值更改觸發的異常嗎?或者這是一個糟糕的設計?如果是這樣,我是否應該提供所有必要的信息以便能夠正確驗證輸入,還是不應該使用DataBinding進行復雜的更改?

我將不勝感激任何幫助!

richn

+0

正如您所建議的那樣,DataBinding不應該違反覆雜的屬性。檢索和設置屬性時應進行驗證。 – 2012-03-29 08:22:14

+0

謝謝約翰。如果你寫了一個,我會接受這個答案。 – richn 2012-03-30 14:12:32

回答

-1

數據綁定不應針對複雜屬性。

檢索和設置屬性時應該進行驗證。

+0

這是一個意見問題。綁定「複雜」屬性(即UDT或枚舉)對於減少樣板代碼的數量非常有用。 – 2013-11-27 16:25:32

+0

你誤解了這個問題,這是潛在的問題。一個複雜的屬性會有一個大的計算和例程,可能在數據綁定過程中產生異常。這應該避免 - 並且與該屬性本身的類型無關。 – 2013-11-27 21:15:34

+0

這可能是,但作者所說的上/下數字並不是那麼複雜。 – 2013-11-27 23:19:37

1

當綁定值更改導致異常時,您會發現綁定有時會吞噬它。

爲了解決這個問題,您可以掛鉤綁定的BindingComplete事件(您可能需要將綁定設置爲FormattingEnabled也爲真)。此時,在綁定寫入數據源時捕獲的任何異常將在事件參數上冒出(在Exception屬性上)。美中不足的是,不幸的是,你可能會發現,堆棧跟蹤的大部分是輸了...

編輯:如果您使用的是BindingSource組件,它也泡BindingComplete事件。因此,這可能是捕獲其他綁定引發的異常的更快捷方式。