我们在WinRT XAML。
我有一个带有依赖项属性B
的自定义控件Items
,该控件位于另一个控件的模板中。依赖项属性使用PropertMetadata
类型初始化为新的空集合。它永远不会受数据限制 - 牢记这一点。
当我进入页面时,控件将被实例化为另一个自定义控件A
的模板的一部分。从B
的构造函数中的断点开始,当我检查Items
的值时,它包含0个项目。
作为其他活动的一部分,控制A
'手动'调用B.Items.Add()
来插入数据。没有数据绑定。
当我向后导航然后再次单击以导航到该页面时,会再次触发构造函数,但这次Items
仍然具有A
添加的值。它保留了它的价值。
所以即使控件被卸载并加载(我可以看到事件),控件和依赖属性也不会重新初始化。
这是对的吗?
答案 0 :(得分:3)
依赖项属性在类B
中声明为静态字段。它只被初始化一次,因此属性元数据中的新集合仅初始化一次,之后由属性的所有“实例”共享。这是依赖属性声明中常见的错误。
您应该在类B
的构造函数中将依赖项属性值设置为新的空集合,而不是按属性元数据提供默认值。