2

我正在挠头来理解依赖属性。

我的查询如下;

由于依赖属性被声明为静态,静态意味着类级别的属性,只会创建单个实例并且所有对象将共享同一个对象。

我有一个用户控件,并且我已将依赖属性 IsHighlighted 添加到该用户控件。这个依赖属性绑定到一些视图模型属性,我已经注册了依赖属性值更改的回调。因此,一旦有人更改视图模型属性,就会调用依赖属性回调,如果 value 为 true,它会启动动画,因为它是布尔值。

现在,我创建了 5 个对象视图,当我将 object1 的 viewmodel 属性设置为 true 时,动画会针对最后一个节点 object5 而不是针对 object1 运行。视图模型的属性是非静态的。

我很困惑将为每个对象创建依赖属性,或者对于所有对象来说它都是单一的。

如果所有对象都是单一的,那么跟踪我需要在其上运行模拟的用户控件属性的更改的方法是什么,因为对于用户控件中的普通 CLR 属性,不会调用更改处理程序。

摘要:依赖属性是在类级别或对象级别创建的。如果它是在类级别创建的,因为它被声明为静态,那么创建对象级别(非静态)的属性的方法是什么,但对于正常的 CLR 属性,它不会有任何值更改回调。那么如何做到这一点。

4

1 回答 1

0

当您查看如何定义依赖属性时,您很快就会注意到它不是通常的静态属性,它更多的是通过设置元数据来描述属性,而不是像使用简单的通常静态属性那样分配纯值。该元数据在 DependencyObjects 中使用(wpf 中的每个控件都继承自 DependencyObject,甚至是 UserControls)。

每个 DependencyObject 对该元数据所做的是管理其自己的依赖属性值。

这就是 object5 仅更改值而不是每个对象的方式。

我希望这张照片现在对你来说更清楚一点。

顺便说一句,我还参考了用户 nit 给你的链接。

为什么 WPF 中的依赖属性必须是静态的

去看看吧。

于 2013-11-09T17:16:50.203 回答