数据绑定
DependencyObject 和 绑定源属性的绑定:
UpdateSourceTrigger 枚举值:
- PropertyChanged : 目标属性发生改变时候立即更新源
- LostFocus : 目标属性发生变化并且失去焦点
- Explicit:调用BindingExpressiong.UpdateSource(),否则无法更新
- Default:根据目标属性的元数据确定更新行为
OneWay和OneTime
OneWay : 数据源改变自动影响目标依赖属性,数据源不再改变。
OneTime : 第一次改变数据源会改变目标依赖属性,以后改变对目标依赖属性没有影响。
数据验证
数据验证一般有四种方式如图:
响应验证错误
System.Windows.Controls.Validation的附加属性记录验证错误,当验证不成功时:
- Validation.HasError为True.
- 创建ValidationError对象,作为ValidationRule.Validate()的返回值.添加到 Validation.Errors集合中
- Validation.Error被引发(前提:Binding.NotifyOnValidationError=True).
1. 错误列表显示错误信息
捕获窗体所有未处理的异常:遍历元素树(LogicalTreeHelper.GetChildren(obj)),如果Validation.HasError(element),则获取所有错误Validation.GetErrors(element).
2. 自定义错误模板
提高用户体验可以自定义:Validation.ErrorTemplate.
<DataGrid.RowValidationErrorTemplate>
<ControlTemplate>
<Grid
ToolTip="{Binding RelativeSource={RelativeSource
FindAncestor, AncestorType={x:Type DataGridRow}},
Path=(Validation.Errors)[0].ErrorContent}">
<Ellipse StrokeThickness="0"
Fill="Red"
Width="{TemplateBinding FontSize}"
Height="{TemplateBinding FontSize}" />
<TextBlock Text="!"
FontSize="{TemplateBinding FontSize}"
FontWeight="Bold"
Foreground="White"
HorizontalAlignment="Center" />
<AdornedElementPlaceholder />
</Grid>
</ControlTemplate>
</DataGrid.RowValidationErrorTemplate>