IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Utiliser un controle utilisateur pour afficher les éléments d'une liste


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 69
    Par défaut Utiliser un controle utilisateur pour afficher les éléments d'une liste
    Bonjour à tous,

    J'ai dans une appli une liste d'éléments. Je lie la source de ma ListBox à une ObservableCollection, du coup quand j'enlève ou ajoute des éléments dynamiquement dans ma liste, tout est OK.

    Seulement voilà, j'aimerais séparer la mise en page de mes éléments du reste. Pour l'instant je fais comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <UserControl.Resources>
            <DataTemplate x:Key="AreaTemplate">
                <Grid>
                    //   Ici l'affichage de mes éléments (un certain nombre de caractéristiques d'une zone de dessin)
                </Grid>
            </DataTemplate>
        </UserControl.Resources>
     
        <Grid>
            <ListBox 
                     ItemTemplate="{StaticResource AreaTemplate}"
                     ItemsSource="{Binding}"
                     IsSynchronizedWithCurrentItem="True" >
            </ListBox>
        </Grid>
    Mon DataTemplate fais un paquet de lignes de codes et j'aimerais pouvoir l'expatrier dans un autre UserControl.

    Par exemple que j'ai un UserControl "ElementZone" qui affiche un seul élément. Et ensuite pouvoir dire dans ma liste que les données sont présentées par un "ElementZone"...

    Serait-ce possible ?

    Merci d'avance...

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    tu peux utiliser un customcontrol qui dispose de son propre style
    apres j'ai peut etre pas trop compris ce que tu voulais faire
    normalement le data template ca correspond bien a ce que tu fais

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Tu crées un UserControl où tu mets le contenu actuel de ton DataTemplate, et dans le DataTemplate tu mets le contrôle :


    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            <DataTemplate x:Key="AreaTemplate">
                <Grid>
                    <my:ElementZone />
                </Grid>
            </DataTemplate>

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 69
    Par défaut
    Exactement ce que je recherchais ! Enfin presque...

    Le composant s'affiche nickel mais les données ne sont pas trouvées. Je pense que du au fait que je rajoute une couche d'abstraction supplémentaire.

    Je passe de ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <DataTemplate x:Key="AreaTemplate">
             <Grid>
                    <TextBox Text="{Binding Path=Caption}" />
                    ....
             </Grid>
    </DataTemplate>
    à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <DataTemplate x:Key="AreaTemplate">
             <UserControl>
                      <Grid>
                             <TextBox Text="{Binding Path=Caption}" />
                             ....
                      </Grid>
             </UserControl>
    </DataTemplate>
    Du coup je pense que je vais rester sur ma première solution, faute de mieux. Mais le problème c'est que je vais encore avoir pas mal d'objets à disposer dans mon contrôle et pas mal de données à afficher, donc le code risque d'être lourd. Mais on va essayer de bien documenter ^^


    PS : je viens de m'en rendre compte, mais utiliser un contrôle pour les éléments de ma liste me permet aussi d'éditer visuellement leur représentation graphique...

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par MiniCesc Voir le message
    Le composant s'affiche nickel mais les données ne sont pas trouvées. Je pense que du au fait que je rajoute une couche d'abstraction supplémentaire.
    Normalement ça devrait marcher pareil... la ListBox affecte chaque élément au DataContext du ListBoxItem, donc le DataContext de ton UserControl devrait être bon. Vérifie dans la fenêtre "Output" de Visual Studio si tu as des erreurs de binding

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 69
    Par défaut
    Je suppose qu'en français ça donne l'onglet "Sortie", à coté de l'onglet "Liste d'erreurs". Je ne vois pas de trace d'erreur qui pourrait être une erreur de binding...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\assembly\GAC_MSIL\Microsoft.VisualStudio.HostingProcess.Utilities\10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.HostingProcess.Utilities.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\assembly\GAC_MSIL\Microsoft.VisualStudio.HostingProcess.Utilities.Sync\10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.HostingProcess.Utilities.Sync.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\assembly\GAC_MSIL\Microsoft.VisualStudio.Debugger.Runtime\10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.Debugger.Runtime.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\SGE\SGEeditor\bin\Debug\SGEeditor.vshost.exe' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\Accessibility\v4.0_4.0.0.0__b03f5f7f11d50a3a\Accessibility.dll' chargé
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework.Classic\v4.0_4.0.0.0__31bf3856ad364e35\PresentationFramework.Classic.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_32\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Data.Entity\v4.0_4.0.0.0__b77a5c561934e089\System.Data.Entity.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_32\System.Data.OracleClient\v4.0_4.0.0.0__b77a5c561934e089\System.Data.OracleClient.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.Serialization\v4.0_4.0.0.0__b77a5c561934e089\System.Runtime.Serialization.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Security\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Security.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\Microsoft.CSharp\v4.0_4.0.0.0__b03f5f7f11d50a3a\Microsoft.CSharp.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Xml.Linq\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.Linq.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Data.DataSetExtensions\v4.0_4.0.0.0__b77a5c561934e089\System.Data.DataSetExtensions.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Xaml\v4.0_4.0.0.0__b77a5c561934e089\System.Xaml.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\WindowsBase\v4.0_4.0.0.0__31bf3856ad364e35\WindowsBase.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_32\PresentationCore\v4.0_4.0.0.0__31bf3856ad364e35\PresentationCore.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework\v4.0_4.0.0.0__31bf3856ad364e35\PresentationFramework.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    Le thread 'vshost.NotifyLoad' (0x334) s'est arrêté avec le code 0 (0x0).
    Le thread '<Sans nom>' (0xcdc) s'est arrêté avec le code 0 (0x0).
    Le thread 'vshost.LoadReference' (0xfdc) s'est arrêté avec le code 0 (0x0).
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\SGE\SGEeditor\bin\Debug\SGEeditor.exe' chargé, symboles chargés.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    Pas à pas détaillé*: pas à pas principal dans le code non-utilisateur 'SGEeditor.App.App'
    Pas à pas détaillé*: pas à pas principal dans le code non-utilisateur 'SGEeditor.App.InitializeComponent'
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework.Luna\v4.0_4.0.0.0__31bf3856ad364e35\PresentationFramework.Luna.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework.resources\v4.0_4.0.0.0_fr_31bf3856ad364e35\PresentationFramework.resources.dll' chargé
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Data.OracleClient.resources\v4.0_4.0.0.0_fr_b77a5c561934e089\System.Data.OracleClient.resources.dll' chargé
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_32\System.Transactions\v4.0_4.0.0.0__b77a5c561934e089\System.Transactions.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_32\System.EnterpriseServices\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.EnterpriseServices.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_32\System.EnterpriseServices\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.EnterpriseServices.Wrapper.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Numerics\v4.0_4.0.0.0__b77a5c561934e089\System.Numerics.dll' chargé, chargement des symboles ignoré. Le module est optimisé et l'option du débogueur 'Uniquement mon code' est activée.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\SGE\SGEeditor\bin\Debug\SGExmlmodels.dll' chargé, symboles chargés.
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'vjjlfznx' chargé
    'SGEeditor.vshost.exe' (Managé (v4.0.30319))*: 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\PresentationCore.resources\v4.0_4.0.0.0_fr_31bf3856ad364e35\PresentationCore.resources.dll' chargé
    Le thread 'vshost.RunParkingWindow' (0xb40) s'est arrêté avec le code 0 (0x0).
    Le thread '<Sans nom>' (0x9a8) s'est arrêté avec le code 0 (0x0).
    Le programme '[2940] SGEeditor.vshost.exe: Managé (v4.0.30319)' s'est arrêté avec le code 0 (0x0).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Python 2.X] Afficher les éléments d'une liste dans une fenetre tkinter
    Par Anatole01 dans le forum Général Python
    Réponses: 4
    Dernier message: 29/04/2015, 15h05
  2. [Débutant] Afficher les éléments d'une liste avec un sub
    Par stracoma dans le forum VB.NET
    Réponses: 3
    Dernier message: 06/01/2015, 22h07
  3. afficher les éléments d'une liste
    Par jane40 dans le forum Débuter
    Réponses: 1
    Dernier message: 18/01/2009, 22h22
  4. Réponses: 2
    Dernier message: 05/05/2007, 17h37
  5. Réponses: 12
    Dernier message: 04/03/2007, 11h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo