Naw*_*waz 11 wpf setter binding dependency-properties
每个绑定通常具有以下四个组件:绑定目标对象,目标属性,绑定源以及要使用的绑定源中的值的路径.例如,如果要将TextBox的内容绑定到Employee对象的Name属性,则目标对象是TextBox,target属性是Text属性,要使用的值是Name,源对象是员工对象.
target属性必须是依赖项属性.
上面的摘录解释了为什么以下代码有效,
<TextBox Text="{Binding EmployeeName}">
Run Code Online (Sandbox Code Playgroud)
它起作用,因为Text是一个依赖属性.到目前为止,一切都很好!
我的问题是,
如果目标属性必须是绑定工作的依赖属性,那么以下的Setter如何工作?请注意,Setter 中的Value不是依赖属性!
<Style TargetType="{x:Type TextBox}">
<Setter Property="Text" Value="{Binding EmployeeName}"/>
</Style>
Run Code Online (Sandbox Code Playgroud)
我有一个解释.但我不确定这是否正确.让我先解释一下,然后,如果我错了,你们要纠正我.:-)
我想,既然该类型的值是对象,这意味着,它可以保存任何类型的实例.它可以包含偶数Binding类型的实例.但是,它不能参与评估(或解析)Binding表达式的过程,因为它不是依赖属性.所以Style对象只是简单地将这个Binding对象(Value保持)从Setter转移到TextBox,而不评估/解析Binding值.因此,上面的Setter变得等同于:
Text="{Binding EmployeeName}"
Run Code Online (Sandbox Code Playgroud)
从现在开始,Text是一个依赖属性,它可以解析Binding值.所以首先看来绑定的目标是Value,但实际上,Text是绑定的目标.
就像Setter是邮差一样,Value本身就是postman的Bag,Binding实例(即Value持有的)是一封信.Postman(即Setter)将字母(即绑定实例)传递给目标(即Text属性),而不打开它,即不知道Letter携带什么Message(即EmployeeName).
如果我错了,请纠正我.
XAML 设置Setter.Value
为类型的对象Binding
。Style
然后,创建的对象将Text
目标对象上的依赖属性设置为 that Binding
,以便Text
每当源属性更改时绑定都会更新。
如果Setter.Value
是依赖属性,那么 setter 最终将成为属性更改通知的中介:源属性更改,绑定通知 setter,setter 通知目标。由于它只是一个 CLR 属性,因此 setter 实际上并不参与更改通知:源属性更改并且绑定通知目标。
归档时间: |
|
查看次数: |
1953 次 |
最近记录: |