【问题标题】:Dependency property is class level or object level依赖属性是类级别或对象级别
【发布时间】:2013-11-09 12:42:21
【问题描述】:

为了理解依赖属性,我摸不着头脑。

我的疑问如下;

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

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

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

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

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

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

【问题讨论】:

标签: c# wpf wpf-controls dependency-properties


【解决方案1】:

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

每个 DependencyObject 对元数据的作用是管理自己的依赖属性值。

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

我希望你的图片现在更清楚了。

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

Why dependency properties in WPF has to be Static

去看看吧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 2012-10-09
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 2014-12-27
    • 1970-01-01
    相关资源
    最近更新 更多