如何解决项目在导航应用程序中被添加了两次
| 我有一个自定义的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”(或任何其他实例方式)设置其初始值,以创建单个初始值。
我想您在应用程序中两次实例化了此控件,应该使用MVVMDataTemplate
?第一个实例会将列添加到使用默认值创建的静态ColumnCollection中,第二个实例也将再次使用此实例。
您可以通过查看ColumnCollection的默认ToString()值来验证这一点,该值将包含用于引用的哈希值。
若要解决,只需将ColumnConfigurationProperty的默认值设置为null。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。