Associé du text et un élement Bindind dans un texrbox [Résolu] - Forum C#

A voir également:Associé du text et un élement bindind dans un texrboxAssocié du texte avec le contenu d'une cellule ✓ - Forum - Excel Associé une valeur à un élément d'une liste déroulante ✓ - Forum - Excel Inspecter l'élément changer texte - Conseils pratiques - Navigateurs Liaison entre deux éléments texte Powerpoint 2010 ✓ - Forum - Powerpoint Scanner un élément d'un document : Image, texte... ✓ - Forum - Word

Bonjour,

Je suis débutante en WPF et je suis fasse a un problème. J'essaye, dans une même textbox d'afficher à la fois du texte et des élément binder. Ce code est écrit dans la partie C# car il s'affiche lorsque on appuie sur un bouton. Es possible à réaliser ? Et si oui comment, car j'arrive soit à afficher le texte soit les éléments binder.

Merci d'avance pour vos réponse.
Cordialement.

Configuration: Android / Chrome 74.0.3729.136

Forum

A voir également:Associé du text et un élement bindind dans un texrboxAssocié du texte avec le contenu d'une cellule ✓ - Forum - Excel Associé une valeur à un élément d'une liste déroulante ✓ - Forum - Excel Inspecter l'élément changer texte - Conseils pratiques - Navigateurs Liaison entre deux éléments texte Powerpoint 2010 ✓ - Forum - Powerpoint Scanner un élément d'un document : Image, texte... ✓ - Forum - Word

Web: www.shapebootstrap.net

7 réponses

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonsoir,

quel est le type de l'élément bindé et quel genre de texte est à associer?

Par ce que par exemple, si on parle d'une vitesse, stockée dans un double, avec un stringFormat dans le binding, tu peux afficher un truc de ce genre

"La vitesse est de 40,2 km/h"
alors que la valeur stockée est 40.198

Reply
réponses:
  • auteur

    Il y a un int, des string et un bool qui si c'est true, il affiche oui et si c'est false il affiche non

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Et tout ça dans un seul textBox?
Ou à la suite?

Quand j'étais petit, la mer Morte n'était que malade.
George Burns

Reply
réponses:
  • auteur

    L’idéal serait que tout c'est élément soit dans une même textBox...

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Alors le plus simple est de créer une propriété dédiée dans la classe bindée.

Par exemple cette classe

     class ExempleHamster18 : INotifyPropertyChanged     {         private int entier;         /// <summary>         /// Entier         /// </summary>         public int Entier         {             get { return entier; }             set             {                 if (entier != value)                 {                     entier = value;                     GenerePropertyChanged("Entier");                 }             }         }          private string texte1;         /// <summary>         /// Texte 1         /// </summary>         public string Texte1         {             get { return texte1; }             set             {                 if (texte1 != value)                 {                     texte1 = value;                     GenerePropertyChanged("Texte1");                 }             }         }          private string texte2;         /// <summary>         /// Texte 2         /// </summary>         public string Texte2         {             get { return texte2; }             set             {                 if (texte2 != value)                 {                     texte2 = value;                     GenerePropertyChanged("Texte2");                 }             }         }          private bool booleen;         /// <summary>         /// Booléen         /// </summary>         public bool Booleen         {             get { return booleen; }             set             {                 if (booleen != value)                 {                     booleen = value;                     GenerePropertyChanged("Booleen");                 }             }         }           private DateTime date;         /// <summary>         /// Date         /// </summary>         public DateTime Date         {             get { return date; }             set             {                 if (date != value)                 {                     date = value;                     GenerePropertyChanged("Date");                 }             }         }           #region INotifyPropertyChanged         public event PropertyChangedEventHandler PropertyChanged;          private void GenerePropertyChanged(string Propriete)         {             if (this.PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(Propriete));         }          #endregion     } 


On veut créer un texte qui contient l'entier, les 2 textes et le booléen, mais pas la date.
On ajoute une propriété en lecture seule qui retourne le nouveau texte, et on signale qu'elle est modifiée à chaque modification d'un composant
     class ExempleHamster18 : INotifyPropertyChanged     {         private int entier;         /// <summary>         /// Entier         /// </summary>         public int Entier         {             get { return entier; }             set             {                 if (entier != value)                 {                     entier = value;                     GenerePropertyChanged("Entier");                     GenerePropertyChanged("Resume");                 }             }         }          private string texte1;         /// <summary>         /// Texte 1         /// </summary>         public string Texte1         {             get { return texte1; }             set             {                 if (texte1 != value)                 {                     texte1 = value;                     GenerePropertyChanged("Texte1");                     GenerePropertyChanged("Resume");                 }             }         }          private string texte2;         /// <summary>         /// Texte 2         /// </summary>         public string Texte2         {             get { return texte2; }             set             {                 if (texte2 != value)                 {                     texte2 = value;                     GenerePropertyChanged("Texte2");                     GenerePropertyChanged("Resume");                 }             }         }          private bool booleen;         /// <summary>         /// Booléen         /// </summary>         public bool Booleen         {             get { return booleen; }             set             {                 if (booleen != value)                 {                     booleen = value;                     GenerePropertyChanged("Booleen");                     GenerePropertyChanged("Resume");                 }             }         }           private DateTime date;         /// <summary>         /// Date         /// </summary>         public DateTime Date         {             get { return date; }             set             {                 if (date != value)                 {                     date = value;                     GenerePropertyChanged("Date");                 }             }         }          /// <summary>         /// Retourne un résumé des propriétés         /// </summary>         public string Resume         {             get             {                 return string.Format("Le texte 1 est '{0}, l'entier est '{1}', les texte 2 est {2}, et tout ça est {3}", texte1, entier, texte2, booleen ? "OK" : "KO");             }         }               #region INotifyPropertyChanged         public event PropertyChangedEventHandler PropertyChanged;          private void GenerePropertyChanged(string Propriete)         {             if (this.PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(Propriete));         }          #endregion     } 


et le xaml
        <TextBlock Text="{Binding Resume, UpdateSourceTrigger=PropertyChanged}"/>


Mais il est tout aussi efficace de mettre un stackpanel horizontal ou un wrappanel et d'y mettre (par exemple) un label pour texte 1, un textblock pour l'entier, un textbox texte 2 et un autre avec un Conveter pour le booléen.

Reply
réponses:
  • auteur

    Bonjour, j'ai tenter d'effectuer votre code cependant, il me met toute ma textBox en souligner bleu avec l'erreur "type Inline attendu". Avez vous une idée d'où peut bien venir ce problème ?
    Cordialement.
    Merci d'avance.

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonsoir

sans ton code, le contenu de la variable et le texte exact de l'erreur, j'en ai pas la moindre idée.

Reply
réponses:
  • auteur

    D'accord.
    J'ai remodifier mon code .. Il m'affiche plus l'erreur dite précédemment mais l'appelle de la méthode "Convert" (classe BiblioSerie) dans le code C# ne fonctionne pas.
    Voici mon code :

    Ma classe bibliothèque que contient la liste de série :

      namespace Atsa {      [System.Windows.Data.ValueConversion(typeof(Serie), typeof(string))]      public class BiblioSerie : System.Windows.Data.IMultiValueConverter     {         public List<Serie> ListSerie { get { return GetAll(); } }          public List<Serie> GetAll()         {             return new List<Serie>()             {             new Serie("Grey's Anatomy","27/03/2005",true,4, "Medias/Photos/Serie_Grey-s_anatomy.jpg", 15,             "Meredith Grey, fille d'un chirurgien très réputé, commence son internat de première année" +             " en médecine chirurgicale dans un hôpital de Seattle. La jeune femme s'efforce de maintenir " +             "de bonnes relations avec ses camarades internes, mais dans ce métier difficile la compétition" +             " fait rage..."),             new Serie("Lucifer", "26/01/2016", false,5, "Medias/Photos/Serie_Lucifer.png", 5, "Lassé et mécontent" +             " de sa position de Seigneur des Enfers, Lucifer Morningstar démissionne et abandonne son royaume" +             " pour la bouillonnante Los Angeles. Dans la Cité des anges, l'ex maître diabolique est le patron" +             " d'un nightclub baptisé Lux."),             new Serie("The 100", "19/03/2014",true,4, "Medias/Photos/Serie_The_100.jpg", 3, "Après une apocalypse" +             " nucléaire, les 318 survivants se réfugient dans des stations spatiales et parviennent à y vivre et" +             " à se reproduire, atteignant le nombre de 4000 ; 97 ans plus tard, une centaine de jeunes délinquants" +             " redescendent sur Terre."),             new Serie("The Walking Dead", "20/03/2011",true,8, "Medias/Photos/Serie_The_walking_dead.jpg", 9, "Après" +             " une apocalypse ayant transformé la quasi-totalité de la population en zombies, un groupe d'hommes et de" +             " femmes mené par l'officier Rick Grimes tente de survivre. Ensemble, ils vont devoir tant bien que mal" +             " faire face à ce nouveau monde.")             };         }                public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)         {             string nom = values[0] as string;             string sortie = values[1] as string;             int saison = (int)values[2];             bool encours = (bool)values[3];                string contenu = string.Format("Titre : {0} \n Sortie : {1} \n Nombre de saison : {2} \n", nom, sortie, saison                 );             if (encours == true)             {                 return contenu + " oui";             }             return contenu + " non";         }          public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)         {             throw new NotImplementedException();         }     } }   





    La classe Serie :


       namespace Atsa.Classes {     public class Serie : INotifyPropertyChanged     {                    private int genre;         /// <summary>         /// Entier         /// </summary>         public int Genre         {             get { return genre; }             set             {                 if (genre != value)                 {                     genre = value;                     GenerePropertyChanged("Genre");                     GenerePropertyChanged("Resume");                 }             }         }          private int nb_saison;         /// <summary>         /// Entier         /// </summary>         public int NbDeSaison         {             get { return nb_saison; }             set             {                 if (nb_saison != value)                 {                     nb_saison = value;                     GenerePropertyChanged("NbDeSaison");                     GenerePropertyChanged("Resume");                 }             }         }           private string nom;         /// <summary>         /// Texte 1         /// </summary>         public string Nom         {             get { return nom; }             set             {                 if (nom != value)                 {                     nom = value;                     GenerePropertyChanged("Nom");                     GenerePropertyChanged("Resume");                 }             }         }          private string images;         /// <summary>         /// Texte 1         /// </summary>         public string Images         {             get { return images; }             set             {                 if (images != value)                 {                     images = value;                     GenerePropertyChanged("Images");                     GenerePropertyChanged("Resume");                 }             }         }          private string date_de_sortie;         /// <summary>         /// Texte 2         /// </summary>         public string DateDeSortie         {             get { return date_de_sortie; }             set             {                 if (date_de_sortie != value)                 {                     date_de_sortie = value;                     GenerePropertyChanged("DateDeSortie");                     GenerePropertyChanged("Resume");                 }             }         }            private string resumer;         /// <summary>         /// Texte 1         /// </summary>         public string Resumer         {             get { return resumer; }             set             {                 if (resumer != value)                 {                     resumer = value;                     GenerePropertyChanged("Resumer");                     GenerePropertyChanged("Resume");                 }             }         }          private bool encours;         /// <summary>         /// Booléen         /// </summary>         public bool EnCours         {             get { return encours; }             set             {                 if (encours != value)                 {                     encours = value;                     GenerePropertyChanged("EnCours");                     GenerePropertyChanged("Resume");                 }             }         }          public event PropertyChangedEventHandler PropertyChanged;          private void GenerePropertyChanged(string Propriete)         {             if (this.PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(Propriete));         }          public Serie(String nom, String date_de_sortie, bool en_cours, int genre, String image, int nb_saison, string resumer)         {             this.Nom = nom;             this.DateDeSortie = date_de_sortie;             this.EnCours = en_cours;             this.Genre = genre;             this.Images = image;             this.Resumer = resumer;             this.NbDeSaison = nb_saison;         }      } }     





    et mon code XAML :

       <Grid >                               <StackPanel DataContext="{Binding BiblioSerie.ListSerie, ElementName=Saison1}">                                   <WrapPanel Margin="10" HorizontalAlignment="Center">                     <ToggleButton Name="Descriptions" Click="Descriptions_Click" Padding="10,5" Width="105" Content="Description" ></ToggleButton>                     <ToggleButton Name="Informations"  Click="Info_Click" Padding="10,5" Width="105" Content="Information" ></ToggleButton>                 </WrapPanel>                   <StackPanel>                     <TextBlock Text="{Binding Convert, UpdateSourceTrigger=PropertyChanged}" TextAlignment="Center" TextWrapping="Wrap" Name="Text_description1">                                     </TextBlock>                 </StackPanel>        





        public partial class Saison_Grey_s_anatomy : Window     {          public Saison_Grey_s_anatomy()         {             InitializeComponent();      }         public BiblioSerie BiblioSerie { get; set; } = new BiblioSerie();         public BiblioSaison BiblioSaison { get; set; } = new BiblioSaison();           private void Descriptions_Click(object sender, RoutedEventArgs e)         {              var BiblioSerie = new BiblioSerie();             Binding mBindingNom = new Binding("ListSerie[0]");             mBindingNom.Source = BiblioSerie.Convert;             var resumer = this.Text_description1.SetBinding(TextBlock.TextProperty, mBindingNom);         }           private void Info_Click(object sender, RoutedEventArgs e)         {             var BiblioSerie = new BiblioSerie();             Binding mBindingNom = new Binding("ListSerie[0].Resumer");              mBindingNom.Source = BiblioSerie;             var resumer = this.Text_description1.SetBinding(TextBlock.TextProperty, mBindingNom);         }       } }   

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

, j'ai tenter d'effectuer votre code cependant,

Alors déjà, c'est pas du tout ce que je t'ai proposé, un converter est une façon de faire, parfaitement adaptée au MVC ou MMVC, mais ce que je t'ai proposé -> composer ton texte dans la classe métier, me paraissait plus accessible à un débutant.

Un converter c'est pas une classe métier, donc ta liste de séries n'a rien à y faire.

Un converter ça sert, coté interface, à décrire comment WPF doit afficher une donnée.
Par exemple, on a un double qui stocke une température, le converter va retourner une couleur qui va du bleu nuit au jaune intense selon la température, avec la méthode Convert.
La méthode ConvertBAch servant à l'opération inverse.
Oui encore tu as un bool et tu veux voir une coche verte si c'est true et une croix rouge si c'est false.

Du coup, un converter n'est pas un datacontext. Ça s'appelle, au moment du binding.
Voir ici comment cela s'utilise
https://www.wpf-tutorial.com/fr/39/data-binding/conversion-de-valeur-avec-ivalueconverter/

Reply
réponses:
  • auteur

    D'accord je voit pourquoi ma méthode ne fonctionne pas, mais si je créé une méthode Resume dans BiblioSerie comment la faire appeler depuis mon code C# ? Et comment faire pour que Resume fonctionne ?
    En gros ce que je veux exactement faire c'est que j'ai un textBlock dans ma view et si je clique sur le bouton description ça affiche le texte que j'essaye de former ( le texte avec les éléments bindés) et si je clique sur l'autre bouton, je veux qui s'afficher un string bindé ( cette partie fonctionne) dans la même textBox à la place de l'autre affichage.

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Alors, ta méthode Resume tu lui mets un paramètre (un bool par exemple)
Si c'est true tu construis le 1er texte et si c'est false tu construis le 2eme.
Le texte ainsi construit, tu l'affectes à une propriété (MonTexteDeSortie, par exemple).
C'est cette propriété que tu bindes à ton textblock
Elle doit déclencher l'événement PropertyChanged de façon à prévenir le binding de la modification de la valeur.
Et dans chacun de tes bouton tu appelles Resume avec soit true, soit false.

 public void Resume(bool Texte1) {      if(Texte1)//on construit le texte selon le bool            sortie = "Texte 1";      else            sortie = "Pas texte 1";            GenerePropertyChanged("MonTexteDeSortie");//on prévient le binding du changement }   private string sortie="";  public string MonTexteDeSortie {       get {return sortie;} } 

Reply
réponses:
  • auteur

    Merci ! Ça fonctionne ! Merci beaucoup de votre aide !

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

De rien

Reply

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed