C# 依赖项属性具有在控件构造时设置的值
我们在WinRT XAML 我有一个自定义控件C# 依赖项属性具有在控件构造时设置的值,c#,xaml,windows-runtime,winrt-xaml,C#,Xaml,Windows Runtime,Winrt Xaml,我们在WinRT XAML 我有一个自定义控件B,它具有一个依赖项属性Items,该控件位于另一个控件的模板中。使用PropertMetadata类型将dependency属性初始化为新的空集合。它从来都不是数据绑定的——请记住这一点 当我进入页面时,该控件被实例化为另一个自定义控件A的模板的一部分。从B的构造函数中的断点,当我检查项的值时,它包含0项 作为其他活动的一部分,controlA“手动”调用B.Items.Add(),以插入数据。没有数据绑定 当我向后导航,然后再次单击导航到页面时,
B
,它具有一个依赖项属性Items
,该控件位于另一个控件的模板中。使用PropertMetadata
类型将dependency属性初始化为新的空集合。它从来都不是数据绑定的——请记住这一点
当我进入页面时,该控件被实例化为另一个自定义控件A
的模板的一部分。从B
的构造函数中的断点,当我检查项的值时,它包含0项
作为其他活动的一部分,controlA
“手动”调用B.Items.Add()
,以插入数据。没有数据绑定
当我向后导航,然后再次单击导航到页面时,构造函数再次被触发,但这次项
仍然添加了A
的值。它保留了它的价值
因此,即使卸载并加载了控件(我可以看到事件),控件和依赖项属性也不会重新初始化
这是否正确?依赖项属性在类B
中声明为静态字段。它只初始化一次,因此属性元数据中的新集合只初始化一次,以后由属性的所有“实例”共享。这是依赖项属性声明中常见的错误
您应该在类B
的构造函数中将依赖项属性值设置为新的空集合,而不是通过属性元数据提供默认值。依赖项属性在类B
中声明为静态字段。它只初始化一次,因此属性元数据中的新集合只初始化一次,以后由属性的所有“实例”共享。这是依赖项属性声明中常见的错误
您应该在类B
的构造函数中将依赖项属性值设置为新的空集合,而不是通过属性元数据提供默认值。依赖项属性在类B
中声明为静态字段。它只初始化一次,因此属性元数据中的新集合只初始化一次,以后由属性的所有“实例”共享。这是依赖项属性声明中常见的错误
您应该在类B
的构造函数中将依赖项属性值设置为新的空集合,而不是通过属性元数据提供默认值。依赖项属性在类B
中声明为静态字段。它只初始化一次,因此属性元数据中的新集合只初始化一次,以后由属性的所有“实例”共享。这是依赖项属性声明中常见的错误
您应该在类B
的构造函数中将依赖项属性值设置为新的空集合,而不是通过属性元数据提供默认值。谢谢您的回答,但我认为这不对。属性元数据应应用于“新实例”。“为依赖项属性提供的最常见元数据是为它们提供一个默认值,该值应用于使用该属性的新实例。”-MSDN。老实说,我闻到了虫子的味道。这一个有点不对劲。这绝对不是一个bug,在这里已经讨论过好几次了。属性元数据提供的默认值仅分配给控件的每个新实例中的属性。您可以通过同时创建自定义控件的两个实例并检查项
值来测试这一点。它将是同一个集合对象,即您作为默认值提供的对象。明白了,您是对的。谢谢你的回答,但我认为这不对。属性元数据应应用于“新实例”。“为依赖项属性提供的最常见元数据是为它们提供一个默认值,该值应用于使用该属性的新实例。”-MSDN。老实说,我闻到了虫子的味道。这一个有点不对劲。这绝对不是一个bug,在这里已经讨论过好几次了。属性元数据提供的默认值仅分配给控件的每个新实例中的属性。您可以通过同时创建自定义控件的两个实例并检查项
值来测试这一点。它将是同一个集合对象,即您作为默认值提供的对象。明白了,您是对的。谢谢你的回答,但我认为这不对。属性元数据应应用于“新实例”。“为依赖项属性提供的最常见元数据是为它们提供一个默认值,该值应用于使用该属性的新实例。”-MSDN。老实说,我闻到了虫子的味道。这一个有点不对劲。这绝对不是一个bug,在这里已经讨论过好几次了。属性元数据提供的默认值仅分配给控件的每个新实例中的属性。您可以通过同时创建自定义控件的两个实例并检查项
值来测试这一点。它将是同一个集合对象,即您作为默认值提供的对象。明白了,您是对的。谢谢你的回答,但我认为这不对。属性元数据应应用于“新实例”。“为依赖项属性提供的最常见元数据是为它们提供一个默认值,该值应用于使用该属性的新实例。”-MSDN。老实说,我闻到了虫子的味道。这一个有点不对劲。这绝对不是一个bug,在这里已经讨论过好几次了。属性元数据提供的默认值仅分配给cont的每个新实例中的属性