1
我已经创建了一个声明了一个附加属性,这将持有的DataTemplates的集合类:WPF集合依赖项属性添加重复
public class DynamicTemplatesList : DependencyObject
{
public static readonly DependencyProperty TemplatesProperty =
DependencyProperty.RegisterAttached("Templates", typeof(TemplateCollection), typeof(DynamicTemplatesList), new FrameworkPropertyMetadata(new TemplateCollection(),
FrameworkPropertyMetadataOptions.None));
public static void SetTemplates(UIElement element, TemplateCollection collection)
{
element.SetValue(TemplatesProperty, collection);
}
}
然后在XAML我设置的集合:
<gfc:DynamicTemplatesList.Templates>
<gfc:Template Key="{StaticResource CheckBoxFieldType}"
DataTemplate="{StaticResource CheckBoxTemplate}" />
<gfc:Template Key="{StaticResource LookupEditFieldType}"
DataTemplate="{StaticResource LookupEditTemplate}" />
<gfc:Template Key="{StaticResource TextBoxFieldType}"
DataTemplate="{StaticResource TextBoxTemplate}" />
<gfc:Template Key="{StaticResource DateEditFieldType}"
DataTemplate="{StaticResource DateEditTemplate}" />
</gfc:DynamicTemplatesList.Templates>
这似乎第一次正常工作。然而我注意到的一件事是,当我用这个依赖项属性关闭窗口,然后再次打开它时,看起来模板再次被添加到集合中。
第一次,就在收集4个模板,第二次8,等等等等。任何人都可以向我解释这里发生了什么?
我怀疑这是因为依赖属性的静态特性,为什么被复制的值,如果是这样的话任何人都可以点我的解决方案,以防止被安装集合属性从添加重复?
看来,如果我将新的FrameworkPropertyMetadata(新TemplateCollection(), FrameworkPropertyMetadataOptions.None)的依赖项属性的默认值更改为null,当我加载相关的xaml控件时,它将引发一个空异常,指出Templates属性为null 。 –
另一件事是,我不需要派生从DependencyObject有权访问SetCurrentValue方法? –
是的,我确实改变了构造函数 –