将第一个元素设置为x:Null(一个Xaml问题)

将第一个元素设置为x:Null(一个Xaml问题),xaml,syntax,Xaml,Syntax,我为XAML控件创建了自定义集合属性: class MyClass : DependencyObject { public ObservableCollection<object> MyCollection { get { return GetValue(MyCollectionProperty) as ObservableCollection<object>;} set { SetValue(MyCollectionPro

我为XAML控件创建了自定义集合属性:

class MyClass : DependencyObject
{
    public ObservableCollection<object> MyCollection
    {
        get { return GetValue(MyCollectionProperty) as ObservableCollection<object>;}
        set { SetValue(MyCollectionProperty, value); }
    }
    public static readonly DependecyProperty MyCollectionProperty = 
        DependencyProperty.Register(nameof(MyCollection), typeof(ObservableCollection<object>), new PropertyMetadata(new ObservableCollection<object>()));
}
class MyClass:DependencyObject
{
公共可观测集合MyCollection
{
获取{返回GetValue(MyCollectionProperty)作为ObservaleCollection;}
set{SetValue(MyCollectionProperty,value);}
}
公共静态只读DependecProperty MyCollectionProperty=
DependencyProperty.Register(名称(MyCollection)、类型(ObservableCollection)、新属性元数据(新ObservableCollection());
}
但当我尝试在XAML中添加元素时:

<local:MyClass
    *snip*>
    <local:MyClass.MyCollection>
        <x:Null/> // this causes a crash because it sets my collection to null
        <Button/>
        <x:Null/>
    </local:MyClass.MyCollection>
</local:MyClass>

//这会导致崩溃,因为它将我的集合设置为null
我得到一个XamlParseException-“…属性已经被设置了…”我想发生的是解析器将上述代码解释为一个请求,将我的整个集合设置为null,然后尝试将其设置为Button,然后将其设置为null。如果Button是第一个按钮,那么按钮和空值将毫无问题地添加到我的默认列表中


在XAML中将列表中的第一个元素设置为null的正确语法是什么?的内容属性和集合语法组合部分是迄今为止我找到的最有用的参考资料。我的猜测是,这将是某种标记扩展,但我所尝试的一切都会产生相同的错误。

一个选项是从MyCollection属性中删除setter-如果没有可用的setter,XAML解析器会将您的集合解释为隐式集合(无法设置,但可以添加到其中)这意味着解析器不会将初始x:Null解释为Null集合,而是将其添加到现有列表中

发件人:

隐式集合元素在逻辑树表示形式中创建成员,即使它没有作为元素出现在标记中。通常,父类型的构造函数对其属性之一的集合执行实例化,并且最初为空的集合成为对象树的一部分