Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF/XAML:向list类型的依赖项属性添加元素_C#_Wpf_Xaml - Fatal编程技术网

C# WPF/XAML:向list类型的依赖项属性添加元素

C# WPF/XAML:向list类型的依赖项属性添加元素,c#,wpf,xaml,C#,Wpf,Xaml,我想要的是一个可以保存某个列表的依赖属性。如果没有元素,列表不应为空,但依赖属性应为空 定义如下: public List<Element> Elements { get { return (List<Element>)GetValue(ElementsProperty); } set { SetValue(ElementsProperty, value); } } public static readonly DependencyProperty Elemen

我想要的是一个可以保存某个列表的依赖属性。如果没有元素,列表不应为空,但依赖属性应为空

定义如下:

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));
如果我将“new PropertyMetadata(null)”替换为“new PropertyMetadata(new List())”,它就正常工作了。但是在这种情况下,如果没有元素,depencence属性不为null

如果我将“new PropertyMetadata(null)”替换为“new PropertyMetadata(new List())”,它就正常工作了

然后,默认列表将在控件的所有实例之间共享。如果需要默认列表,应在构造函数中初始化
列表

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));

}
公共类参数控件:控件
{
公共参数控制()
{
元素=新列表();
}
公共列表元素
{
get{return(List)GetValue(ElementsProperty);}
set{SetValue(elementsprroperty,value);}
}
公共静态只读从属属性元素属性=
Register(“Elements”、typeof(List)、typeof(ParameterControl)、newpropertyMetadata(null));
}

这就是大多数集合依赖属性在WPF中的实现方式,即它们总是返回一个可能为空的实际集合对象。

此变体的优点是每个ParameterControl get都是一个列表。但最初的问题是,当列表中没有元素时,列表不是空的,而是空的。@be_mi:是的。你的意思是什么?这就是大多数集合依赖属性的实现方式,即它们总是返回一个可能为空的对象。在这种情况下,元素如何变为null?有很多参数控件,但只有一个或两个元素被指定。因此,我不希望创建不必要的对象。在什么情况下?当然,如果您不在某个地方初始化它,它将是
null
。如果元素列表是“不必要的”,那么您也可以完全删除该属性。正如我所说,集合依赖属性总是返回集合。它们不应该返回null,因为这样您就不能在XAML中填充它们。好的,集合依赖属性总是返回集合,并且永远不能为null。这就是我一直在寻找的答案。
System.Windows.Markup.XamlParseException: ... "Elements" ist NULL.
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));

}