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 :

Binding et sous-control utilisateur


Sujet :

Windows Presentation Foundation

  1. #1
    Membre régulier
    Homme Profil pro
    Responsable SI (Toulouse)
    Inscrit en
    Juillet 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable SI (Toulouse)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 78
    Points : 122
    Points
    122
    Par défaut Binding et sous-control utilisateur
    Bonjour,
    Voici ma problématique :

    J'ai une fenêtre WPF qui affiche des éléments j'ai créer pour chaque contrôle un binding qui s'attache a plusieurs propriétés d'une classe.
    - StarterPanel.xaml
    - VMPanel.cs

    Voici ce que je voudrais faire proprement.
    Ma fenêtre WPF(StarterPanel) est une fenêtre de connexion. C'est-à-dire qu'elle doit afficher des informations concernant les connectés de mon appli donc des contrôles affichant des adresses IP / fqdn de machine/ etc... ou rien quand il n'y a rien.


    Dans la pratique je pensais créer un contrôle WPF spécifique qui définit les propriétés d'une machine connectée host.xaml (avec IP/fqdn/etc) bindé sur une classe host.cs avec des propriétés pour un connecté.

    La ou j'ai un peu de mal, c'est que je ne sais pas comment agir sur ma classe StarterPanel pour ajouter x hosts ? D'autre part je ne sais pas très bien comment faire le bind ?

    Ce que j'imaginais c'est à la connexion d'un host modifier ma classe StarterPanel (mais directement dans le code ?) pour y ajouter les contrôles host et les binder par x host.cs , mais je pense que je ne respecte pas du tout le MVVC ?

    Si quelqu'un pouvait m'éclairer.

    Merci !

  2. #2
    Membre expérimenté
    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
    Points : 1 313
    Points
    1 313
    Par défaut
    met du code ca sera plus simple a comprendre
    dans tous les cas dans un usercontrol
    quand on veut faire du binding sur une dp interne
    il faut faire un binding du type
    {binding madp, elementName=uc}

    avec un c:name="uc" dans le xaml du usercontrol

    comme on a pas acces au templateBindingd'ou l'interet de faire des customcontrol
    eheheheheh
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!
    http://ultimatecorp.eu/wpf/

  3. #3
    Membre régulier
    Homme Profil pro
    Responsable SI (Toulouse)
    Inscrit en
    Juillet 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable SI (Toulouse)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 78
    Points : 122
    Points
    122
    Par défaut
    Salut Ikeas,
    Et merci de m'avoir répondu bon je vais pas te cacher que j'ai pas tout compris, mais voila ce que j'ai fait qui répond à mon besoin. Mais je ne pense pas que cela soit vraiment dans les règles de l'art !

    Voila mes vues :

    Mon control principal ('ai enlevé le code inutile) doit contenir mon x sous-controle situé dans la ligne 0
    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
     
    <UserControl x:Class="nextUI.Launcher.StarterPanel"
                 xmlns:local="clr-namespace:nextUI.Launcher"
     
                 mc:Ignorable="d" 
                 d:DesignHeight="150" d:DesignWidth="200">
     
        <Grid Opacity="0.92" Background="#CC0A0A0A" MinWidth="200" MinHeight="60">
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition Height="50"/>
                <RowDefinition Height="24"/>
                <RowDefinition Height="18"/>
            </Grid.RowDefinitions>
            <Grid Grid.Row="0">
                <ItemsControl ItemsSource="{Binding ConnectedCollection}">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <local:HostConnected HorizontalAlignment="Center" />
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </Grid>
     
            <Grid Grid.Row="2">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition />
                    <ColumnDefinition />
                </Grid.ColumnDefinitions >
            </Grid>
        </Grid>
    </UserControl>
    Mon sous-control simplifié
    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
     
    <UserControl x:Class="nextUI.Launcher.HostConnected"
     
                 xmlns:local="clr-namespace:nextUI.Launcher"
                 mc:Ignorable="d" >
        <Grid MinWidth="100">
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>
     
            <Grid Grid.Row="0">
                <TextBlock x:Name="hostname" HorizontalAlignment="Center" Text="{Binding HostName}" VerticalAlignment="Center" Foreground="White" />
            </Grid>
            <Grid Grid.Row ="1">
                <TextBlock x:Name="IP" Text="{Binding HostIp}" HorizontalAlignment="Center"  VerticalAlignment="Center" Foreground="White"/>
            </Grid>
        </Grid>
     
    </UserControl>

    Mes vue-modèles (la première de mon control principale, contient une collection de la vue-modèle de mon deuxième controle ):

    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
     
    public class VMPanel : INotifyPropertyChanged
        {
            private static Collection<ConnectedInfoVM> connectedClientInfo;
     
            public VMPanel() { }
     
            public VMPanel(INetwork netserver)
            {
                initNetServer(netserver);
     
            }
     
            public void initNetServer(INetwork netServer)
            {
                connectedClientInfo = new Collection<ConnectedInfoVM>();
                connectedClientInfo.Add(new ConnectedInfoVM());
                connectedClientInfo.Add(new ConnectedInfoVM());
     
                this.netServer = netServer;
                ListenerPanel listener = new ListenerPanel(this);
                netServer.addListener(listener);
            }
     
     
     
            public Collection<ConnectedInfoVM> ConnectedCollection
            {
                get
                {
                    return connectedClientInfo;
                }
     
                set
                {
     
                }
            }
     
        }
    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
     
    namespace nextUI.Launcher
    {
        public class ConnectedInfoVM
        {
            private string hostName="hostname";
            private string hostIP="X.X.X.X";
     
            public string HostName
            {
                get
                {
                    return hostName;
                }
                set
                {
                    hostName = value;
                }
            }
     
            public string HostIp
            {
                get
                {
                    return hostIP;
                }
                set
                {
                    hostIP = value;
                }
            }
        }
    }

  4. #4
    Membre expérimenté
    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
    Points : 1 313
    Points
    1 313
    Par défaut
    premier point tu devrais deja plutot faire un data template pour le type
    ConnectedInfoVM
    plutot que de faire un usercontrol

    dans ce style (c'est un exemple a moi) a pres tu bind normalement ton items source et ca marche direct)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <DataTemplate x:Key="OPCServersVisu"
                      DataType="{x:Type trade:OPCServers}">
            <Grid>
                <StackPanel Orientation="Vertical"
                            VerticalAlignment="Center"
                            HorizontalAlignment="Center"
                            Margin="2">
                    <Image  Height="32"
                            Width="32"
                            Source="images/servers.png" />
                    <TextBlock Text="OPC Servers" />
                </StackPanel>
            </Grid>
        </DataTemplate>
    et si tu veux que cela s'applique a tous les types tu enleve la x:key comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <DataTemplate 
                      DataType="{x:Type trade:OPCServers}">
            <Grid>
                <StackPanel Orientation="Vertical"
                            VerticalAlignment="Center"
                            HorizontalAlignment="Center"
                            Margin="2">
                    <Image  Height="32"
                            Width="32"
                            Source="images/servers.png" />
                    <TextBlock Text="OPC Servers" />
                </StackPanel>
            </Grid>
        </DataTemplate>
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!
    http://ultimatecorp.eu/wpf/

Discussions similaires

  1. Problème Edit Mode GridView controle Utilisateur ASP sous Smartpart
    Par -FGVS- dans le forum Développement Sharepoint
    Réponses: 0
    Dernier message: 14/10/2009, 16h15
  2. problème de binding avec un controle utilisateur
    Par EmacLi dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 06/10/2009, 21h17
  3. Réponses: 4
    Dernier message: 17/01/2006, 09h49
  4. Réponses: 68
    Dernier message: 30/11/2005, 17h29
  5. Réponses: 4
    Dernier message: 14/10/2005, 19h53

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