Question

Existe-t-il un moyen d’ajouter une ressource à un ResourceDictionary à partir de code sans lui attribuer de clé de ressource?

Par exemple, j'ai cette ressource en XAML:

<TreeView.Resources>
    <HierarchicalDataTemplate DataType="{x:Type xbap:FieldPropertyInfo}"
        ItemsSource="{Binding Path=Value.Values}">
            <TextBlock Text="{Binding Path=Name}" />
    <HierarchicalDataTemplate>
</TreeView.Resources>

Je dois créer cette ressource de manière dynamique à partir de code et l'ajouter à TreeView ResourceDictionary. Toutefois, en l'absence de clé dans XAML, cela signifie qu'elle est utilisée par défaut pour tous les types FieldPropertyInfo. Existe-t-il un moyen de l'ajouter à la ressource dans le code sans avoir de clé ou existe-t-il un moyen d'utiliser une clé tout en conservant son utilisation dans tous les types FieldPropertyInfo?

Voici ce que j'ai déjà fait en C #:

HierarchicalDataTemplate fieldPropertyTemplate = new HierarchicalDataTemplate("FieldProperyInfo");

fieldPropertyTemplate.ItemsSource = new Binding("Value.Values");

this.Resources.Add(null, fieldPropertyTemplate);

Évidemment, l'ajout d'une ressource au ResourceDictionary, la clé null ne fonctionne pas.

Était-ce utile?

La solution

Utilisez le type auquel vous souhaitez que le modèle s'applique en tant que clé:

HierarchicalDataTemplate fieldPropertyTemplate = new 
    HierarchicalDataTemplate("FieldProperyInfo");

fieldPropertyTemplate.SetBinding(
   HierarchialDataTemplate.ItemSourceProperty, 
   new Binding("Value.Values");
this.Resources.Add(FieldPropertyInfo.GetType(), fieldPropertyTemplate);

La raison pour laquelle votre code ne fonctionnait pas était que votre n'établissait pas réellement la liaison . Vous devez appeler SetBinding avec la propriété à laquelle vous souhaitez que la liaison soit liée.

Autres conseils

Utilisez le type auquel vous souhaitez que le modèle s'applique en tant que clé:

this.Resources.Add(FieldPropertyInfo.GetType(), fieldPropertyTemplate);

Comme pour votre modèle ci-dessus, vous fournissez un type. Vous devez soit fournir un nom, soit un type.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top