我想要的是一个可以保存某些内容列表的依赖项属性。如果没有元素,则列表不应为空,但依赖项属性应为null。
这是定义:
public List<Element> Elements {
get { return (List<Element>)GetValue(ElementsProperty); }
set { SetValue(ElementsProperty, value); }
}
public static readonly DependencyProperty ElementsProperty =
DependencyProperty.Register("Elements", typeof(List<Element>), typeof(ParameterControl), new PropertyMetadata(null));
添加元素时...
<controls:Knob.Elements>
<controls:Element Position="50,0" Text="j"/>
</controls:Knob.Elements>
...我得到这个例外。
System.Windows.Markup.XamlParseException: ... "Elements" ist NULL.
如果我将“ new PropertyMetadata(null)”替换为“ new PropertyMetadata(new List())”,则它可以正常工作。但是在这种情况下,如果没有元素,则depencency属性不为null。
答案 0 :(得分:1)
如果我将“ new PropertyMetadata(null)”替换为“ new PropertyMetadata(new List())”,则它可以正常工作。
然后,默认列表将在控件的所有实例之间共享。如果要使用默认列表,则应在构造函数中初始化List<Element>
:
public class ParameterControl : Control
{
public ParameterControl()
{
Elements = new List<Element>();
}
public List<Element> Elements
{
get { return (List<Element>)GetValue(ElementsProperty); }
set { SetValue(ElementsProperty, value); }
}
public static readonly DependencyProperty ElementsProperty =
DependencyProperty.Register("Elements", typeof(List<Element>), typeof(ParameterControl), new PropertyMetadata(null));
}
这是在WPF中实现大多数集合依赖属性的方式,即它们总是返回一个可能为空的实际集合对象。