项目在导航应用程序中被添加了两次

问题描述

| 我有一个自定义的Silverlight(4)控件,与datagrid不同。该控件具有一个称为ColumnConfiguration的属性。在Navigation应用程序中使用此控件时,ColumnConfiguration会再次添加其项(通过XAML),同时保留其旧列,结果是向该控件添加了两倍于正常数量的列。
public ColumnCollection ColumnConfiguration
{
    get { return (ColumnCollection)GetValue(ColumnConfigurationProperty); }
    set { SetValue(ColumnConfigurationProperty,value); }
}

public class ColumnCollection : Collection<ColumnBase> { }
如何防止将这些列再次添加到控件中? Xaml是这样的:
<my:Control.ColumnConfiguration>
<my:ColumnTypeA Width=\"*\" MinWidth=\"50\">
</my:ColumnTypeA>
<my:ColumnTypeB Width=\"2*\" MinWidth=\"50\">

</my:ColumnTypeB>
<my:ColumnTypeB Width=\"2*\" MinWidth=\"50\">

</my:ColumnTypeB>
<my:ColumnTypeB Width=\"*\" MinWidth=\"50\">

</my:ColumnTypeB>
<my:ColumnTypeB Width=\"2*\" MinWidth=\"50\">

</my:ColumnTypeB>
</my:Control.ColumnConfiguration>
    

解决方法

        可能是您在
DependencyProperty
UIPropertyMetaData中提供了默认值吗?由于
DependencyProperty
是静态的,因此为控件的所有实例指定的默认值将是相同的(引用)。当使用值类型时,这是无害的,但是当您的属性是引用类型时,您将必须使用控件的“ 4”(或任何其他实例方式)设置其初始值,以创建单个初始值。 我想您在应用程序中两次实例化了此控件,应该使用MVVM
DataTemplate
?第一个实例会将列添加到使用默认值创建的静态ColumnCollection中,第二个实例也将再次使用此实例。 您可以通过查看ColumnCollection的默认ToString()值来验证这一点,该值将包含用于引用的哈希值。 若要解决,只需将ColumnConfigurationProperty的默认值设置为null。