2009-04-16 6 views
1

Je tente d'utiliser XAML pour représenter et charger un graphique de types personnalisés qui forment un semantic model pour un domaine d'affaires.Comment un type personnalisé chargé par XAML obtenir une référence à l'objet racine

Une chose que je voudrais faire est d'être en mesure d'obtenir une référence à l ' « objet racine » du graphique à partir d'un objet plus profond dans l'arbre. Je ne peux pas trouver un moyen simple de le faire autrement que de recourir à des pratiques barbares comme d'avoir l'objet racine comme singleton.

Des idées?

Répondre

1

Je ne sais pas que c'est un problème unique XAML. Tout ce que fait XAML est d'instancier vos objets "enfants" et de les ajouter à une propriété de collection sur l'objet "parent". Donc, si vous aviez quelque chose comme:

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

... alors vous finiriez avec une catégorie « Produits » avec deux sous-catégories. Ce serait à vous de coder votre classe "Catégorie" de telle sorte que l'ajout d'une sous-catégorie sauvegarde une référence au "propriétaire" de cette sous-catégorie quelque part. J'utiliserais probablement un type de collection personnalisé (substituez les méthodes Add et Remove afin qu'elles définissent la propriété "Parent" ou "Owner" sur l'objet ajouté).

+0

Merci. Le problème que j'ai est que la façon dont XAML fonctionne pour les propriétés de type collection, je ne vois aucun moyen de faire passer le XamlReader dans l'objet "owning". – Raoul

+0

Mais si la méthode « sous-catégories » la propriété est d'un type que vous avez défini (et met en œuvre ICollection), vous pouvez faire tout ce que vous aimez quand le bouton « Ajouter » est appelée. C'est ce que fait le XAML, non? Appelez la méthode Add avec chaque élément? Je ne sais pas avec certitude. –

+0

Absolument on peut créer n'importe quelle méthode Add() on veut; l'astuce consiste cependant à demander au XamlReader de l'invoquer et il ne cherche que les méthodes Add() définies sur un ensemble limité d'interfaces, aucune de celles-ci ne supporte un Add() qui facilite le passage dans l'objet parent. – Raoul

Questions connexes