WPF 数据绑定基础
纯理论,可能会枯燥。
.net 技术群: 199281001 ,欢迎加入。
1.目标对象一定是派生自DependencyObject的对象,并且目标属性必须是依赖属性,否则数据绑定操作将会失 败。绑定源对象可以不是依赖对象和依赖属性。
2.定义了依赖属性时,FrameworkPropertyMetadataOptions.NotDataBindable 标志会影响依赖属性的绑定。当改变源对象依赖属性值后,绑定目标可以立即得以更新,开发人员不需要响应事件来手动编写响应代码。
3.移除绑定:开发人员可以通过BindingOperations类的两个静态方法移除绑定。
<1> ClearAllBindings():从指定的DependencyObject 中移除所有的绑定。
<2>ClearBinding(): 获取一个依赖属性作为参数。如果该属性存在绑定,则移除绑定。
这两个方法的适用示例如下。
BindingOperations.ClearAllBindings(nameTextBox,TextBox.TextProperty);
BindingOperations.ClearBinding(nameTextBox);
ClearAllBindings()和ClearBinding() 都是派生自DependentyObject类的ClearValue()方法来移除属性的本地值。
4.绑定方向
<1>OneWay :当源属性发生更改时更新目标属性。
<2>TwoWay :当源属性发生更改时更新新目标属性,当目标属性发生更改时,同时也更改源属性。
<3>OneTime :仅当应用程序启动时或DataContext进行更改时更新目标属性。
<4>OneWayToSource :在目标属性更改时更新源属性。
<5>Default :使用目标属性的默认Mode 值。
5.绑定更新
<1>Default :绑定目标属性的默认UpdateSourceTrigger值。 多数依赖项属性的默认值为PropertyChanged,而Text属性的默认值为 LostFocus()。
<2>PropertyChanged :当绑定的目标属性更改时,立即更新绑定源。
<3>LostFocus() :当绑定目标元素失去焦点时,更新绑定源。
<4>Explicit :仅在调用UpdateSource()方法时更新绑定源。
6.绑定到非元素的对象
<1>Source :指向源对象的引用,也即提供数据对象的引用。
<2>RelativeSource :指向当前元素自身的对象。允许为目标对象指定一个相对于源对象的目标对象。这不太好理解。
RelativeSource Mode属性
<2.1>PreviousData :允许绑定所显示的数据项列表中以前的数据项(不是包含数据项的控件)。
<2.2>TemplatedParent :引用应用模板(其中有绑定数据的元素)的元素。
<2.3>Self :引用用户对其设置绑定的元素。
<2.4>FindAncestor :引用数据绑定元素父链中的上级。
<3>DataContext :如果没有指定Source或者RelativeSource属性,WPF将从当前元素开始向上搜索元素树。检查每个元素的DataContext属性,并且会使用最先找到的DataContext,也即DataContext属性不为null的数据上下文,DataContext可以绑定很多属性。