在WPF中,源屬性(Source Property)指的是提供數據的屬性,通常是數據模型或者其他控制項的屬性,而目標屬性(Target Property)則是數據綁定的目標,通常是綁定到控制項的屬性,例如TextBlock的Text屬性。數據綁定將源屬性的值自動更新到目標屬性中。 主要包含以下幾個事件: ...
在WPF中,源屬性(Source Property)指的是提供數據的屬性,通常是數據模型或者其他控制項的屬性,而目標屬性(Target Property)則是數據綁定的目標,通常是綁定到控制項的屬性,例如TextBlock的Text屬性。數據綁定將源屬性的值自動更新到目標屬性中。
主要包含以下幾個事件:
1. UpdateSourceTrigger:用於控制數據綁定如何更新源數據的事件
- PropertyChanged:每當目標屬性的值更改時,將立即更新源屬性。
- LostFocus:當目標元素失去焦點時,更新源屬性。
- Explicit:只有在調用BindingExpression.UpdateSource方法時才會更新源屬性。
- Default:與綁定目標和屬性的數據類型有關,通常是LostFocus或PropertyChanged事件。
- Explicit和LostFocus是最常見的UpdateSourceTrigger事件,而PropertyChanged是最常用的預設事件。
2. NotifyOnTargetUpdated:指定當綁定目標發生更改時是否引發TargetUpdated事件。
- 如果將此屬性設置為true,則當目標屬性更改時,將在綁定源上引發TargetUpdated事件(可在該事件中通知綁定源進行相應的更改)。
- 需要註意的是,如果在綁定中使用了Mode屬性,並且Mode屬性的值為TwoWay,則NotifyOnTargetUpdated屬性將被忽略。這是因為在TwoWay模式下,更改源或目標都會引發另一個方向上的更新。
3. NotifyOnSourceUpdated:指定當綁定源發生更改時是否引發SourceUpdated事件。
- 如果將此屬性設置為true,則當源屬性更改時,將在綁定目標上引發SourceUpdated事件(可在該事件中通知綁定目標進行相應的更改)。
- 需要註意的是,如果在綁定中使用了Mode屬性,並且Mode屬性的值為TwoWay,則NotifyOnSourceUpdated和屬性將被忽略。這是因為在TwoWay模式下,更改源或目標都會引發另一個方向上的更新。
4. ValidatesOnDataErrors:是一個可選的事件,它允許開發人員在數據綁定時驗證數據,是用於指定是否啟用數據驗證錯誤。
- 當設置了該事件時,WPF會在數據源中實現IDataErrorInfo介面的類中的Error屬性發生更改時,自動調用該事件。開發人員可以使用該事件來檢測數據綁定中的錯誤,並採取適當的措施,例如禁用按鈕或顯示錯誤消息。如果開發人員不設置ValidatesOnDataErrors事件,則WPF將不會在數據綁定中自動執行數據驗證。如何利用 IDataErrorInfo 實現數據校驗 - LXLR - 博客園 (cnblogs.com)
- 當數據驗證失敗時,綁定會將錯誤信息存儲在Binding對象的Validation.Errors屬性中。但是,這些錯誤信息不會自動顯示在UI元素中,需要使用NotifyOnValidationError屬性來實現。
5. NotifyOnValidationError:用於指定當數據驗證失敗時是否觸發屬性更改事件。
- 如果設置為True,則當數據驗證失敗時,屬性更改事件將被觸發,這意味著可以在代碼中捕獲和處理該事件。如果設置為False,則屬性更改事件將不會在數據驗證失敗時觸發。
- 當NotifyOnValidationError屬性設置為True時,如果綁定數據時發生驗證錯誤,Binding會引發一個Validation.Error事件,該事件可以被UI元素捕獲並顯示錯誤信息。