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

Silverlight Discussion :

[DataBinding] Apostrophe StringFormat


Sujet :

Silverlight

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 77
    Par défaut [DataBinding] Apostrophe StringFormat
    bonjour à tous,

    Je viens vers vous pour un petit soucis pas très bloquant mais quand même très pénible ....

    J'ai un Textblock dont la propriété text est databindingé à la propriété d'un ViewModel.


    J'utilise le StringFormat pour que le texte de mon textblock débute toujours avec la même chaine de caractère

    J'ai donc celui côté XAML :


    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    <TextBlock Text="{Binding Path=InternalNumberString,StringFormat='Détails de l équipement {0}'}" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock>

    Le problème est que ce n'estpas très propre étant donné qu'il manque l'apostrophe au mot équipement.

    J'ai donc essayé ceci :

    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    <TextBlock Text="{Binding Path=InternalNumberString,StringFormat='Détails de l'équipement {0}'}" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock>

    Evidemment cela ne fonctionne pas et c'est normal

    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    <TextBlock Text="{Binding Path=InternalNumberString,StringFormat='Détails de l''équipement {0}'}" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock>

    Doubler l'apostrophe ne fonctionne pas non plus ...

    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    <TextBlock Text="{Binding Path=InternalNumberString,StringFormat='Détails de l\'équipement {0}'}" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock>

    Marche pas non plus ...


    Donc ma question est : Comment faire en sorte que le string format affiche au final une apostrophe ? J'ai retourné pas mal de site qui donnent un exemple sur les stringformat mais pas un n'a ce cas "particulier" en exemple ....

    Merci d 'avance pour vos réponses.

    Pyroa.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,
    Tout simplement ça : StringFormat=Détails de l\'équipement {0}

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 152
    Par défaut
    Bonjour

    Essaie :

    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    <TextBlock Text="{Binding Path=InternalNumberString,StringFormat='Détails de l&apos;équipement {0}'}" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock>

    &apos; ====> '

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 77
    Par défaut
    Citation Envoyé par h2s84 Voir le message
    Salut,
    Tout simplement ça : StringFormat=Détails de l\'équipement {0}
    Ceci ne fonctionne pas, sinon le XAML n'est pas correctement interprêté !

    J'ai donc cette erreur :

    Unexpected token Open in Rule: MarkupExtension ::= '{' TYPENAME (Arguments)? @'}', in '{Binding Path=InternalNumberString,StringFormat=Détails de l\'équipement {0},FallbackValue='Equipement inconnnu',TargetNullValue='Equipement inconnu'}'.

    Citation Envoyé par farfouch00 Voir le message
    Bonjour

    Essaie :

    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    <TextBlock Text="{Binding Path=InternalNumberString,StringFormat='Détails de l&apos;équipement {0}'}" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock>

    &apos; ====> '
    Ne fonctionne pas non plus erreur de syntaxe :s
    Même si bizarrement le &quot; est accepté !

  5. #5
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Bonjour,

    Ton problème est lié à l'utilisation des attributs des Binding qui ne permette aucun caractère d'échappement. Il faut donc s'en passer et passer par le contenu d'une balise, plus flexible.

    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        <Grid x:Name="LayoutRoot" Background="White">
    
            <Grid.Resources>
                <system:String x:Key="MonFormat">L'équipe {0}</system:String>
            </Grid.Resources>
    
            <StackPanel>            
                <TextBlock Text="{Binding ElementName=LayoutRoot,Path=Background, StringFormat={StaticResource MonFormat}}"></TextBlock>
            </StackPanel>
    
        </Grid>

    C'est moins rapide à l'écriture mais cela fonctionne

    PS : Pour que la String "MonFormat" soit déclarable dans la ressource il faut ajouter le namespace

    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlns:system="clr-namespace:System;assembly=mscorlib"

  6. #6
    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 : 43
    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
    T'es sûr que ça marche pas avec le backslash ? Je viens de tester, avec WPF ça fonctionne en tous cas...

    Sinon, une possibilité est de mettre la chaine dans une ressource, ou dans une propriété statique d'une classe, et d'y faire référence via x:Static

  7. #7
    Invité
    Invité(e)
    Par défaut
    La solution que je t'ai fournie marche très bien avec WPF mais bon là c'est du Silverlight

    Sinon rien ne t'empêche de formater le texte dans ta ViewModel et du coup tu gagneras en performance vu que le Binding n'aura rien à formater.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 77
    Par défaut
    Citation Envoyé par Samuel Blanchard Voir le message
    Bonjour,

    Ton problème est lié à l'utilisation des attributs qui ne permette aucun caractère d'échappement. Il faut donc s'en passer et passer par le contenu d'une balise, plus flexible.

    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        <Grid x:Name="LayoutRoot" Background="White">
    
            <Grid.Resources>
                <system:String x:Key="MonFormat">L'équipe {0}</system:String>
            </Grid.Resources>
    
            <StackPanel>            
                <TextBlock Text="{Binding ElementName=LayoutRoot,Path=Background, StringFormat={StaticResource MonFormat}}"></TextBlock>
            </StackPanel>
    
        </Grid>

    C'est moins rapide à l'écriture mais cela fonctionne

    PS : Pour que la String "MonFormat" soit déclarable dans la ressource il faut ajouter le namespace

    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlns:system="clr-namespace:System;assembly=mscorlib"
    Ah ben ca ca marche ^^ Merci ^^

    J'aurais jamais eu l'idée de passer par une ressource statique :s


    Citation Envoyé par tomlev Voir le message
    T'es sûr que ça marche pas avec le backslash ? Je viens de tester, avec WPF ça fonctionne en tous cas...

    Sinon, une possibilité est de mettre la chaine dans une ressource, ou dans une propriété statique d'une classe, et d'y faire référence via x:Static
    Oui oui je suis sûr ^^

    Je me suis pas mal cassé la tête sur le stringformat entre WPF et silverlight, ils n'ont pas du tout le même comportement ni le même fonctionnement, la différence de la page sur MSDN entre le framework 4.0 et Silverlight 4.0 est assez elocante !

    Effectivement la ressource est la solution :o)

    Merci à vous pour les réponses !


    [Edit ] :

    Citation Envoyé par h2s84 Voir le message
    La solution que je t'ai fournie marche très bien avec WPF mais bon là c'est du Silverlight

    Sinon rien ne t'empêche de formater le texte dans ta ViewModel et du coup tu gagneras en performance vu que le Binding n'aura rien à formater.
    Oui c 'est la méthode que j'allais envisager si jamais je ne trouvais vraiment aucune solution. Je suis assez têtu, quand un truc marche pas je veux savoir pourquoi ^^

    ET puis peut être que je vais finalement devoir passer par le ViewModel pour le formatage, vu qu'au final l'application doit être localisé mais comme je n'ai pas jeté un seul coup d'oeil à la localisation en Silverlight ....

  9. #9
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Personnellement je passe toujours par le ViewModel pour formater mes chaines ^^

  10. #10
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Citation Envoyé par Samuel Blanchard Voir le message
    Personnellement je passe toujours par le ViewModel pour formater mes chaines ^^
    Et quand tu dois formater le texte de cellules d'une grid bindée sur un IEnumerable de ton objet? Tu rajoutes une propriété à ton objet?

  11. #11
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    oui car la les objets du IEnumerable que je passe dans le grid sont des ViewModels.

  12. #12
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Citation Envoyé par Samuel Blanchard Voir le message
    oui car la les objets du IEnumerable que je passe dans le grid sont des ViewModels.
    Des models ou des view models?

  13. #13
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    un viewmodel qui wrappe un model

  14. #14
    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 : 43
    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 Samuel Blanchard Voir le message
    Personnellement je passe toujours par le ViewModel pour formater mes chaines ^^
    Y a des cas où c'est pas possible... par exemple si tu bindes sur quelque chose qui ne vient pas du ViewModel, comme une propriété d'un contrôle. Ou encore un MultiBinding qui combine des bindings sur des objets distincts...

    Mais en général, je suis d'accord, c'est la solution la plus simple

  15. #15
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Citation Envoyé par Samuel Blanchard Voir le message
    un viewmodel qui wrappe un model
    Hmmmm
    J'ai une Grid bindée sur une PagedCollectionView qui est remplie via l'appel à une Query de mon DomainService.
    Comment tu mets en place ta technique dans ce cas là?

  16. #16
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Hmmmm
    J'ai une Grid bindée sur une PagedCollectionView qui est remplie via l'appel à une Query de mon DomainService.
    Comment tu mets en place ta technique dans ce cas là?
    Je n'utilise pas trop les DomainServices car je ne suis pas fan des RIA services mais il me semble que les classes generées par ton DomaineService sont marquées partial et possèdent l'interface INotifyPropertyChanged. C'est donc sans doute possible.

    Y a des cas où c'est pas possible... par exemple si tu bindes sur quelque chose qui ne vient pas du ViewModel, comme une propriété d'un contrôle. Ou encore un MultiBinding qui combine des bindings sur des objets distincts...
    Pour le binding sur une propriété de control ça sort du cadre de la question puisque je parlais de Binding de chaine de caractère (même si un Binding en mode TwoWay commun entre deux controles dans un Viewmodel est toujours possible). Sinon Thomas, le MultiBinding n'existe pas en Silverlight ^^

    Personnellement je passe toujours par le ViewModel pour formater mes chaines ^^
    Pour finir, je vois bien que ce coté catégorique du "toujours" vous a choqué je voulais dire toujours dans la situation décrite dans le probleme (même si je confesse que j'utilise le ViewModel très très souvent).

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

Discussions similaires

  1. Pb apostrophes et replace access2000
    Par xycoco dans le forum Access
    Réponses: 8
    Dernier message: 06/10/2004, 15h11
  2. Réponses: 3
    Dernier message: 10/06/2004, 22h34
  3. Apres l'accent l'apostrophe
    Par man80 dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 04/05/2004, 16h47
  4. Stocker un apostrophe
    Par Bowen dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/03/2004, 00h00
  5. Problème avec les apostrophes
    Par misterbillyboy dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/07/2003, 16h39

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