gpt4 book ai didi

wpf - 绑定(bind)是否仅适用于 DependencyProperty?

转载 作者:行者123 更新时间:2023-12-04 02:19:54 25 4
gpt4 key购买 nike

MSDN says,

  • Each binding typically has these four components: a binding target object, a target property, a binding source, and a Path to the value in the binding source to use. For example, if you want to bind the content of a TextBox to the Name property of an Employee object, your target object is the TextBox, the target property is the Text property, the value to use is Name, and the source object is the Employee object.

  • The target property must be a dependency property.



上面的摘录解释了为什么下面的代码有效,
<TextBox Text="{Binding EmployeeName}">

它之所以有效,是因为 Text 是一个依赖属性。到目前为止,一切都很好!

我的问题是,

IF 目标属性必须是 的依赖属性绑定(bind)工作,那么下面的 二传手 工作?请注意 值(value) 在 Setter 中不是依赖属性!
<Style TargetType="{x:Type TextBox}">
<Setter Property="Text" Value="{Binding EmployeeName}"/>
</Style>

我对此有一个解释。但我不确定这是否正确。让我先解释一下,然后,如果我错了,你们纠正我。 :-)

我认为,因为 Value 的类型是 对象 ,这意味着它可以保存任何类型的实例。它可以保存一个偶数 Binding 类型的实例。 但是,它不能参与评估(或解析)绑定(bind)表达式的过程,因为它不是依赖属性。 所以 Style 对象只是简单地将这个 Binding 对象(Value 持有)从 Setter 传输到 TextBox,而无需评估/解析 Binding 值。因此,上面的 Setter 等效于:
 Text="{Binding EmployeeName}"

而且从现在开始,Text 是一个依赖属性,它可以解析 Binding 值。 所以一开始看起来绑定(bind)的目标是Value,但实际上Text是绑定(bind)的目标。

这就像 Setter 是一个 postman ,Value 本身是 postman 的 Bag,Binding 实例(即 Value 所持有的)是一个 Letter。 Postman(即 Setter)将 Letter(即 Binding 实例)传递给 Target(即 Text 属性),而不打开它,即不知道 Letter 携带的 Message(即 EmployeeName)。

如果我错了,请纠正我。

最佳答案

XAML 正在设置 Setter.ValueBinding 类型的对象. Style如此创建然后设置Text目标对象上的依赖属性到 Binding ,以便绑定(bind)将更新 Text每当源属性更改时。

如果 Setter.Value如果是依赖属性,那么 setter 最终将成为属性更改通知的中介:源属性更改,绑定(bind)通知 setter,setter 通知目标。由于它只是一个 CLR 属性,因此 setter 实际上并不参与更改通知:源属性更改并且绑定(bind)通知目标。

关于wpf - 绑定(bind)是否仅适用于 DependencyProperty?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4316174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com