请帮助我了解“ABC”值的存储位置。当我运行内存分析器时,我没有看到任何MyClass实例,实际上绑定工作,GroupBox.Header获取值ABC ...
感谢您的帮助。
<GroupBox Header="{Binding Path=(local:MyClass.Tag1), RelativeSource={RelativeSource Self}}"
local:MyClass.Tag1="ABC" />
public class MyClass
{
public static readonly DependencyProperty Tag1Property = DependencyProperty.RegisterAttached("Tag1", typeof(object), typeof(MyClass), new UIPropertyMetadata(null));
public static object GetTag1(DependencyObject obj)
{
return obj.GetValue(Tag1Property);
}
public static void SetTag1(DependencyObject obj, object value)
{
obj.SetValue(Tag1Property, value);
}
}
答案 0 :(得分:2)
依赖项属性在内部维护字典。使用稀疏存储机制存储值。这些属性在类级别关联 - 是静态的。值ABC作为键值对存储在字典中
答案 1 :(得分:2)
以下是对其工作原理的直接解释:http://nirajrules.wordpress.com/2009/01/19/inside-dependencyobject-dependencyproperty/
基本上如Hasan Fahim所说,依赖属性存储在内部Hashtable中,基于属性名称和属性的所有者。通过将属性存储为与所有者关联,您实际上可以在HashTable中为同一类型的不同对象提供唯一的entires。这意味着Get和Set方法不需要是静态的。
示例:
public class Something
{
public static readonly DependencyProperty IsEditableProperty = DependencyProperty.Register("IsEditable", typeof(Boolean), typeof(ResourceCanvas), new PropertyMetadata(true));
public Boolean IsEditable
{
get { return (Boolean)this.GetValue(IsEditableProperty); }
set { this.SetValue(IsEditableProperty, value); }
}
}
对于版本,我可以实例化Something类型的许多实例,每个实例都包含IsEditable的“不同”值。