彩票走势图

WPF 4.5探秘之五 新BindingExpression信息

原创|其它|编辑:郝浩|2012-08-23 22:01:41.000|阅读 1990 次

概述:作为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=&quot;_textBlockWithBinding" Text="{Binding Name}" />

那么在这种情况下你会有几个由Binding定义的元素:

1. 标靶是TextBlock。 这是Binding完成的对象:也是数据的去处;

2. 目标属性是绑定定义的目标对象DependencyProperty属性。 这里是TextBlock的“Text”Dependency属性;

3. 源是ViewModel:数据的来源;

4. 源属性是Binding指定的属性。这里是ViewModel模型的“Name”属性。这个元素可以从Binding的Path属性中获取的;

然后我们要定义“BindingGroup&rdquo;的概念。这是一个来创建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@pclwef.cn

文章转载自:网络资源编译

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP