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

本文关键字:两次 添加 导航 应用程序 项目 | 更新日期: 2023-09-27 17:58:12

我有一个自定义的Silverlight(4)控件,与数据网格没有什么不同。此控件有一个名为ColumnConfiguration的属性。在导航应用程序中使用此控件时,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是静态的,因此为控件的所有实例指定的默认值都将相同(引用)。使用值类型时,这是无害的,但如果属性是引用类型,则必须使用控件的.ctor()(或任何其他实例方式)设置其初始值,才能创建单独的初始值。

我想您在应用程序中已经两次实例化了这个控件,应该是使用MVVM DataTemplate?第一个实例将向使用默认值创建的静态ColumnCollection中添加列,第二个实例也将再次使用此实例。

您可以通过查看ColumnCollection的默认ToString()值来验证这一点,它将包含引用的哈希值。

要解决此问题,只需将ColumnConfigurationProperty的默认值设置为null。