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 :

Contatenation de 2 chaine en XAML


Sujet :

Windows Presentation Foundation

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 25
    Points : 29
    Points
    29
    Par défaut Contatenation de 2 chaine en XAML
    Salut
    Je suis un peu nouveau dans WPF, mais presentement j'utilise XAML avec le databinding a l'aide du modele MVVM
    J'aimerais afficher 2 proprietes dans un seul champ en XAML comme Nom et prenom. J'Arrive a afficher le nom ou le prenom pas les 2.
    Comment je peux faire voici mon exemple de code :


    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <TextBox Name="txtNomPrenom"
                         Grid.Column="1"
                         Grid.Row="1"
                         Grid.ColumnSpan="10"
                         Margin="0,0,5,0"
                         Text="{Binding Mode=OneWay,Path=NomProprietaire}"/>
            </Grid>

    Merci de m'aider

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Dans ton binding, passe l'objet en entier et utilise un Converter pour accéder/renvoyer le nom et le prénom

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 25
    Points : 29
    Points
    29
    Par défaut
    et comment utiliser le converter

  4. #4
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Puisque c'est du WPF, je suggère plutot le MultiBinding.
    (Pour le converter regarde IValueConverter sur MSDN)

  5. #5
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par PitMaverick78 Voir le message
    Puisque c'est du WPF, je suggère plutot le MultiBinding.
    J'aime pas trop, trop lourd à mettre en place je trouve :p

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    J'aime pas trop, trop lourd à mettre en place je trouve :p
    Surtout qu'en plus du MultiBinding tu passeras toujours par un Converter.

    La méthode proposée par Thomas me semble la plus simple à utiliser.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Rock01 Voir le message
    et comment utiliser le converter
    pour savoir comment faire tu as un exemple ici.

  8. #8
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Citation Envoyé par h2s84 Voir le message
    Surtout qu'en plus du MultiBinding tu passeras toujours par un Converter.
    Ah? Pourquoi?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par PitMaverick78 Voir le message
    Ah? Pourquoi?
    Depuis que je me suis mis à WPF, j'ai jamais lu ou entendu que le MultiBinding à lui seul savait comment représenter les valeurs qu'on lui passe et fournir un résultat attendu par l'utilisateur.

    Tu seras toujours obligé d'utiliser un converter pour aider le MutliBinding à savoir comment convertir la liste des valeurs qu'il a reçu de tes bindings.

    Dans le présent problème l'utilisateur veut effectuer la concaténation de 2 propriétés. S'il utilise un MutliBinding comment voudras-tu que ce dernier sache qu'on veut la concaténation des valeurs ?

    D'ailleurs je te défie de me donner un exemple de MutliBinding où on n'aura pas besoin d'un concerter. Bonne chance.

  10. #10
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Un multibinding, ca prend en paramètres plusieurs binding et avec un converter, tu fais la concaténation.

    Donc comme indiqué, il faudra quand même un Converter mais la syntaxe du MB est plus lourde...

  11. #11
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Il fut un temps ou le converter n'était pas obligatoire et ca pouvait se faire via StringFormat. (cf http://connect.microsoft.com/VisualS...d-stringformat )

  12. #12
    Invité
    Invité(e)
    Par défaut
    , fait gaffe je crois que t'as mal traduit ce qu'il voulait dire
    Bon m'enfin je pense

  13. #13
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    ??
    Il dit bien qu'il fut un temps ou on pouvait faire un multibinding sans faire de converter et rien qu'en utilisant le StringFormat. C'était la le sens de ma réponse.
    D'ailleurs si on suit le post vers le blog qu'il indique : http://blogs.msdn.com/b/vinsibal/arc...ormatting.aspx
    On voit bien un exemple qui marchait mais ne marche plus aujourd'hui:
    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
    <TextBlock>
     
      <TextBlock.Text>
     
        <MultiBinding StringFormat="Item1 cost: {0}, Item2 cost: {1}">
     
          <Binding ElementName="myComboBox" Path="SelectedItem.Content"/>
     
          <Binding ElementName="myComboBox2" Path="SelectedItem.Content"/>
     
        </MultiBinding>
     
      </TextBlock.Text>
     
    </TextBlock>

  14. #14
    Invité
    Invité(e)
    Par défaut
    Cool, j'avoue vraiment que je ne savais pas qu'on pouvait le faire.
    Merci pour le lien.
    je continue ma lecture pour savoir à quelle version de WPF cela était possible
    Encore merci.

  15. #15
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Avec plaisir sauf qu'a priori ca marche plus (meme en 3.5 sur visual studio 2010). A tester sur VS2008.
    Pendant un temps j'ai cru que j'étais devenu fou et que j'avais revé faire du WPF...

  16. #16
    Invité
    Invité(e)
    Par défaut
    je dirais plutôt avec VS2008 + .Net 3.5 sans le SP1.
    Je viens de tester avec VS2008 + .net 3.5 SP1 et ça m'oblige à fournir un MultiValueConverter.

  17. #17
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Citation Envoyé par h2s84 Voir le message
    je dirais plutôt avec VS2008 + .Net 3.5 sans le SP1.
    Je viens de tester avec VS2008 + .net 3.5 SP1 et ça m'oblige à fournir un MultiValueConverter.
    Oui mais le titre de l'article ou c'est utilisé c'est "New WPF 3.5 SP1 feature"

    Edit:
    Ptain! Même dans MSDN ils s'y mettent (cf http://msdn.microsoft.com/en-us/libr...ingformat.aspx )
    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
    <ListBox ItemsSource="{StaticResource MyData}">
     
      <ListBox.ItemTemplate>
        <DataTemplate>
          <TextBlock>
            <TextBlock.Text>
              <MultiBinding  StringFormat="{}{0} -- Now only {1:C}!">
                <Binding Path="Description"/>
                <Binding Path="Price"/>
              </MultiBinding>
            </TextBlock.Text>
          </TextBlock>
        </DataTemplate>
      </ListBox.ItemTemplate>
    </ListBox>

  18. #18
    Invité
    Invité(e)
    Par défaut
    Ecoute PitMaverick78 et par ailleurs Thomas :
    j'ai creusé dans le dernier lien que tu m'a fourni et je reviens sur ce que j'avais dit précédent à savoir qu'il n'était pas possible d'utiliser du MutliBinding sans passer par un MultiValueConverter et ben c'est possible de le faire quelque soit avec WPF tout court. Suffit juste d'exécuter ce code xaml suivant :
    Code xml : 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
     
    <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>
     
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
     
            <ComboBox x:Name="cb1" Grid.Column="0" Margin="2">
                <ListBoxItem Content="Item 0 - 1" />
                <ListBoxItem Content="Item 0 - 2" />
                <ListBoxItem Content="Item 0 - 3" />
                <ListBoxItem Content="Item 0 - 4" />
                <ListBoxItem Content="Item 0 - 5" />
            </ComboBox>
     
            <ComboBox x:Name="cb2" Grid.Column="1" Margin="2">
                <ListBoxItem Content="Item 1 - 1" />
                <ListBoxItem Content="Item 1 - 2" />
                <ListBoxItem Content="Item 1 - 3" />
                <ListBoxItem Content="Item 1 - 4" />
                <ListBoxItem Content="Item 1 - 5" />
            </ComboBox>
     
            <TextBlock Grid.ColumnSpan="2" Grid.Row="1">
                <TextBlock.Text>
                    <MultiBinding StringFormat="cbOne : {0} ### cbTwo : {1}" FallbackValue="Deux items doivent être sélectionnés">
                        <Binding Path="SelectedItem.Content" ElementName="cb1" />
                        <Binding Path="SelectedItem.Content" ElementName="cb2" />
                    </MultiBinding>
                </TextBlock.Text>
            </TextBlock>
        </Grid>

    Bon j'avoue aussi que j'ai été pousser vers l'erreur du designer VS qui m'envoie le message d'erreur suivant :
    Impossible de définir MutliBinding parce MutliValueConverter doit être spécifié
    qui aurait plutôt être :
    Impossible de définir MutliBinding parce MutliValueConverter ou StringFormat doit être spécifié
    Bon on peut dire que je t'ai aidé à gagner le défi que je t'ai lancé
    Oui bon vive PitMaverick78

  19. #19
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Bon jsuis en train de reflectorer l'assembly pour voir ce qui s'y trouve.
    Il semblerait que tant que StringFormat n'est pas valable (IsNullOrEmpty) ca affiche une erreur de compilation.

    Edit: HAHA! Je l'ai!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    internal override BindingExpressionBase CreateBindingExpressionOverride(DependencyObject target, DependencyProperty dp, BindingExpressionBase owner)
    {
        if ((this.Converter == null) && string.IsNullOrEmpty(base.StringFormat))
        {
            throw new InvalidOperationException(SR.Get("MultiBindingHasNoConverter"));
        }
        for (int i = 0; i < this.Bindings.Count; i++)
        {
            CheckTrigger(this.Bindings[i]);
        }
        return MultiBindingExpression.CreateBindingExpression(target, dp, this, owner);
    }

  20. #20
    Invité
    Invité(e)
    Par défaut
    Vu l'implémentation du code on peut dire que MutliBinding a bien besoin d'un converter ou du StringFormat pour fonctionner.

    Reste à dire à Microsoft de bien vouloir nous balancer des messages plus explicites.

Discussions similaires

  1. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25
  2. Réponses: 2
    Dernier message: 10/07/2002, 11h51
  3. [TP]lire une ligne de l'ecran et la stocker dans une chaine
    Par Bleuarff dans le forum Turbo Pascal
    Réponses: 26
    Dernier message: 02/07/2002, 10h08
  4. Réponses: 3
    Dernier message: 12/06/2002, 21h15
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01

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