原創|其它|編輯:郝浩|2012-08-23 22:01:41.000|閱讀 2010 次
概述:作為WPF 4.5新特性介紹的第五部分,詳細介紹了新的BindingExpression信息,WPF4.5彌補了在4.0中不足的地方,增加了一些對偶模有幫助的信息。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
新的綁定BindingExpression在處理綁定的代碼是一個非常有用的API。 在WPF 4.0它缺少一些對偶模有幫助的信息。在WPF 4.5中又有什么改進呢,下面讓我們來進一步了解一下。更多WPF4.5探秘系列文章 WPF控件
什么是Binding?
我們現在有一個綁定到ViewModel模型Name Property屬性下的TextBlock的Text屬性。
<TextBlock x:Name="_textBlockWithBinding" Text="{Binding Name}" />
那么在這種情況下你會有幾個由Binding定義的元素:
1. 標靶是TextBlock。 這是Binding完成的對象:也是數據的去處;
2. 目標屬性是綁定定義的目標對象DependencyProperty屬性。 這里是TextBlock的“Text”Dependency屬性;
3. 源是ViewModel:數據的來源;
4. 源屬性是Binding指定的屬性。這里是ViewModel模型的“Name”屬性。這個元素可以從Binding的Path屬性中獲取的;
然后我們要定義“BindingGroup”的概念。這是一個來創建Bindings之間關系的方法。
目標是能夠將ValidationRules創建為一組屬性,用以代替單個單個的驗證。
你需要在一個Panel上定義BindingGroup,內部的控制除某些特殊情況下,都將是它的一部分。BindingGroup的定義Panel就被稱為BindingGroup所有者。
然后BindingGroup類將會有一些方法來管理綁定對象狀態:BeginEdit、CommitEdit、CancelEdit。 你可以把它當作一種與IEditableObject一樣的來執行相同功能的方法。
這里是一個定義XAML的BindingGroup的例子:
<StackPanel.BindingGroup>
<BindingGroup NotifyOnValidationError="True">
<BindingGroup.ValidationRules>
<src:ValidateDateAndPrice ValidationStep="ConvertedProposedValue" />
</BindingGroup.ValidationRules>
</BindingGroup>
</StackPanel.BindingGroup>
如何檢索Binding Expression?
Binding expression是一個包含Binding信息的對象。
要檢索它,你必須知道兩個條件:目標屬性和目標對象。然后可以用下面的代碼片段從名為“GetBindingExpression”的BindingOperation類調用一個靜態方法:
BindingExpression bindingExpresion = BindingOperations
.GetBindingExpression(_textBlockWithBinding, TextBlock.TextProperty);
從WPF 4.5開始,下列屬性已經被添加到BindingExpression類中:
1. Target:綁定的標靶是DependencyObject;
2. TargetProperty:DependencyProperty是Binding的目標屬性;
3. ResolvedSource:該對象用作Binding源,如果未找到就將是null;
4. ResolvedSourcePropertyName:源屬性的名稱。如果ResolvedSource是null那么它也是null。這不是Path,只是屬性名稱;
5. BindingGroup:如果它存在,它就是Binding的Binding組;
6. Bindinggroup.Owner:如果它存在,就歸屬于BindingGroup對象;
//The target
DependencyObject target = bindingExpresion.Target;
//The target property
DependencyProperty targetProperty = bindingExpresion.TargetProperty;
//The source object
object source = bindingExpresion.ResolvedSource;
//The source property name
string sourcePropertyName = bindingExpresion.ResolvedSourcePropertyName;
//The binding group
BindingGroup bindingGroup = bindingExpresion.BindingGroup;
//The binding group's owner
if (bindingGroup != null)
{
DependencyObject bindingGroupOwner = bindingExpresion.BindingGroup.Owner;
}
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡資源編譯