关于 silverlight 中的 依赖属性

night_edge 2011-10-19 07:20:26
最近看了一些介绍依赖属性的文章,明白了应该如何定义和使用。
只是还不明白什么时候用依赖属性,什么时候用CLR属性?


举个例子,我自定义了一个控件,里面包含10个基础控件,我要把一部分控件的属性传到整体控件的属性里面,
我定义的都是CLR属性

public Visibility ShowChart
{
get { return this.chkShowChart.Visibility; }
set { this.chkShowChart.Visibility = value; }
}

会有啥弊端么? 我感觉运行没啥区别。

“依赖属性是指能够通过代码指定、同时又能够通过Silverlight服务指定其值的属性。在这里,Silverlight服务主要指数据绑定、样式或者动画。”

这里的 绑定 指的是什么 是那个{Binding }么?
为啥我用上面 CLR属性也能写出 Binding

小白一个,没接触过WPF 希望大家不要嫌问题幼稚,帮忙解答一下吧。
...全文
234 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
night_edge 2011-10-20
  • 打赏
  • 举报
回复
关于 templatebinding 还没接触到 不知应该怎么用 我继续学习去...
night_edge 2011-10-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zealot112345 的回复:]

你如果想要将你自定义控件中的子控件属性传递到父控件中。可以通过使用templatebinding方式实现。当然。在父控件中实现的属性必须是依赖属性。
CLR属性实际某种程度上来说就是对字段的封装。这样就会存在一个问题。就是如果相同类型的控件存在N多个。那么对于系统就必须对N多个相同控件分配N多个字段的存储的空间。这样对于SL来说就是一个很不好的情况。导致性能直线下降。所以这个时候就产生了依赖属……
[/Quote]

都说的很详细 小弟明白了

谢谢 程兴亮大哥和 hhddzz

感谢 zealot的细致解答 话说你回复两遍是对zealot 2段攻击的继承么...哈哈
night_edge 2011-10-20
  • 打赏
  • 举报
回复
关于内存的基本了解了。只是关于绑定的还有点混乱,
不知有没有例子可以参考?

谢谢程兴亮大哥,谢谢 hhddzz
zealot112345 2011-10-20
  • 打赏
  • 举报
回复
你如果想要将你自定义控件中的子控件属性传递到父控件中。可以通过使用templatebinding方式实现。当然。在父控件中实现的属性必须是依赖属性。
CLR属性实际某种程度上来说就是对字段的封装。这样就会存在一个问题。就是如果相同类型的控件存在N多个。那么对于系统就必须对N多个相同控件分配N多个字段的存储的空间。这样对于SL来说就是一个很不好的情况。导致性能直线下降。所以这个时候就产生了依赖属性和附加属性。依赖属性定义类中以静态形式存在的。它的存储位置在堆上。它内部存储是以类似哈希结构的形式存放的实例对应的键值的。举个例子。比如你有2个BUTTON控件。这样你就存在2个TEXT属性。而对于依赖属性TEXTPROPERTY只有一个。它是通过类似以实例为键。去寻找它对应的实例值。这样的存储的好处是一次性分配存储控件,最大程度上减少碎片的产生。实际意义上在SL中,CLR属性可以说是对依赖属性的封装。所以这就回到你说的那个“为啥我用上面 CLR属性也能写出 Binding”的问题上了。当它CLR属性赋值的时候虽然你有BINDINGEXPRESSION。但是无法识别dependencyproperty的get和set方法。所以还是无法正确实现绑定。
zealot112345 2011-10-20
  • 打赏
  • 举报
回复
你如果想要将你自定义控件中的子控件属性传递到父控件中。可以通过使用templatebinding方式实现。当然。在父控件中实现的属性必须是依赖属性。
CLR属性实际某种程度上来说就是对字段的封装。这样就会存在一个问题。就是如果相同类型的控件存在N多个。那么对于系统就必须对N多个相同控件分配N多个字段的存储的空间。这样对于SL来说就是一个很不好的情况。导致性能直线下降。所以这个时候就产生了依赖属性和附加属性。依赖属性定义类中以静态形式存在的。它的存储位置在堆上。它内部存储是以类似哈希结构的形式存放的实例对应的键值的。举个例子。比如你有2个BUTTON控件。这样你就存在2个TEXT属性。而对于依赖属性TEXTPROPERTY只有一个。它是通过类似以实例为键。去寻找它对应的实例值。这样的存储的好处是一次性分配存储控件,最大程度上减少碎片的产生。实际意义上在SL中,CLR属性可以说是对依赖属性的封装。所以这就回到你说的那个“为啥我用上面 CLR属性也能写出 Binding”的问题上了。当它CLR属性赋值的时候虽然你有BINDINGEXPRESSION。但是无法识别dependencyproperty的get和set方法。所以还是无法正确实现绑定。
hhddzz 2011-10-20
  • 打赏
  • 举报
回复
CLR属性可以用作绑定的目标属性吗?
记得资料上都说绑定的目标属性必须是依赖属性,我没试过……

什么时候用,已经说明白了啊
如果你的属性想要作为数据绑定的目标属性,就要被实现为依赖属性。
如果你的属性想能在Setter里设置,要实现为依赖属性;
如果想要能使用DynamicResource来设置属性值,要实现为依赖属性;
如果要用XXXAnimation类来进行动画,也要实现为依赖属性
Architecture Net 2011-10-19
  • 打赏
  • 举报
回复
请看这篇文章:http://www.cnblogs.com/chengxingliang/archive/2011/04/07/2007085.html
其主要是为了节约内存。

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧