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方法? –
是的,我確實改變了構造函數 –