2 votes

WPF Databinding : Ne pas écraser les valeurs pré-remplies

J'ai un MenuItem que j'aimerais remplir de sous-éléments. Cependant, j'aimerais qu'il conserve les éléments qu'il possède déjà :

<MenuItem Header="_Profiles">
    <MenuItem Header="_New Profile..." />
    <Separator />
    <!-- Databind here! -->
</MenuItem>

Toutefois, lorsque j'essaie d'utiliser la liaison de données déclarative normale, les deux sous-éléments que j'ai déclarés sont éliminés.

Je suis sûr qu'il doit y avoir un moyen de faire cela, mais je n'arrive pas à le comprendre et je ne suis pas sûr que mes recherches sur Google aient été très fructueuses ; quelqu'un peut-il m'aider ?

Merci !

2voto

user7116 Points 39829

Une approche consiste à utiliser un CompositeCollection :

<MenuItem Header="_File">
    <MenuItem.ItemsSource>
        <CompositeCollection>
            <MenuItem Header="_New" />
            <Separator />
            <CollectionContainer Collection="{Binding MenuItems}" />
            <Separator />
            <MenuItem Header="E_xit" />
        </CompositeCollection>
    </MenuItem.ItemsSource>
</MenuItem>

1voto

Josh Points 2857

Il liera tous les éléments de votre collection au MenuItem, de sorte que la seule façon de conserver les éléments après le chargement/modification de votre collection est de s'assurer que ces éléments de menu statiques restent dans la collection.

Une façon de procéder consiste à conserver deux ItemCollections, l'une pour vos valeurs statiques et l'autre pour vos valeurs dynamiques. Liez-les aux valeurs dynamiques. Puis, avant l'affichage du menu, fusionnez les collections. Ainsi, vous n'aurez pas à vous assurer en permanence que les valeurs statiques sont placées comme les deux premiers éléments de votre collection liée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X