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