通过XAML加载的自定义类型如何获得对根对象的引用

通过XAML加载的自定义类型如何获得对根对象的引用,xaml,semantics,Xaml,Semantics,我试图使用XAML来表示和加载自定义类型的图,这些自定义类型构成了业务域的一个图形 我想做的一件事是能够从树中更深的对象获取对图形“根对象”的引用。我找不到任何直接的方法来做这件事,除了诉诸野蛮的实践,比如将根对象作为一个单体 有什么想法吗?我不知道这是XAML特有的问题。XAML所做的只是实例化“子”对象,并将它们添加到“父”对象的集合属性中。所以,如果你有类似的东西: <my:Category Name="Products"> <my:Category.Subcat

我试图使用XAML来表示和加载自定义类型的图,这些自定义类型构成了业务域的一个图形

我想做的一件事是能够从树中更深的对象获取对图形“根对象”的引用。我找不到任何直接的方法来做这件事,除了诉诸野蛮的实践,比如将根对象作为一个单体


有什么想法吗?

我不知道这是XAML特有的问题。XAML所做的只是实例化“子”对象,并将它们添加到“父”对象的集合属性中。所以,如果你有类似的东西:

<my:Category Name="Products">
    <my:Category.Subcategories>
        <my:Category Name="Clothing" />
        <my:Category Name="Jewellery" />
    </my:Category.Subcategories>
</my:Category>


。。。然后你会得到一个“产品”类别,它有两个子类别。这将取决于您对“Category”类进行编码,以便添加子类别可以将对该子类别的“所有者”的引用保存在某个位置。我可能会使用自定义集合类型(覆盖Add和Remove方法,以便它们在要添加的对象上设置“Parent”或“Owner”属性)。

我不知道这是XAML特有的问题。XAML所做的只是实例化“子”对象,并将它们添加到“父”对象的集合属性中。所以,如果你有类似的东西:

<my:Category Name="Products">
    <my:Category.Subcategories>
        <my:Category Name="Clothing" />
        <my:Category Name="Jewellery" />
    </my:Category.Subcategories>
</my:Category>


。。。然后你会得到一个“产品”类别,它有两个子类别。这将取决于您对“Category”类进行编码,以便添加子类别可以将对该子类别的“所有者”的引用保存在某个位置。我可能会使用自定义集合类型(覆盖Add和Remove方法,以便它们在要添加的对象上设置“Parent”或“Owner”属性)。

谢谢。我遇到的问题是,XAML处理集合类型属性的方式无法让XamlReader传入“owning”对象。但是如果“Subcategories”属性属于您定义(并实现ICollection)的类型,那么在调用“Add”方法时,您可以随心所欲。XAML就是这么做的,对吗?是否对每个项调用Add方法?我不确定,绝对可以创建任何想要的Add()方法;但是,诀窍是让XamlReader调用它,它只查找在有限的一组接口上定义的Add()方法,这些接口都不支持有助于传入父对象的Add()。不,不要定义传入父对象的Add()。将父对象传递给构造函数。然后在ICollection的标准Add(T item)方法中分配它。(我的意思是,集合本身的构造函数。大概是在创建窗口时用代码创建的。)谢谢。我遇到的问题是,XAML处理集合类型属性的方式无法让XamlReader传入“owning”对象。但是如果“Subcategories”属性属于您定义(并实现ICollection)的类型,那么在调用“Add”方法时,您可以随心所欲。XAML就是这么做的,对吗?是否对每个项调用Add方法?我不确定,绝对可以创建任何想要的Add()方法;但是,诀窍是让XamlReader调用它,它只查找在有限的一组接口上定义的Add()方法,这些接口都不支持有助于传入父对象的Add()。不,不要定义传入父对象的Add()。将父对象传递给构造函数。然后在ICollection的标准Add(T item)方法中分配它(我的意思是,集合本身的构造函数。大概是在创建窗口时在代码中创建的)