none
WPF binding textBox StatuOf RRS feed

  • Question

  • Bonjour a tous, je tente dans une statut Bar d'afficher un message si tous est ok (depuis un try catch.) LE soucis est que la valeur ne se met jamais a jours:

    using Mm.Wpf.Controls;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using System.Xml.Linq;
    namespace WpfApplication
    {
        /// <summary>
        /// Logique d'interaction pour MainWindow.xaml
        /// </summary>
        public partial class MainWindow : CustomWindow
        {
            public MainWindow()
            {
                string StatuOf = "sdsd ";
                InitializeComponent();
                List <string> results = new List<string>{};
                try
                {
    
                    XElement ListeDonnee = XElement.Load("ListeJoueurs.xml");
                    IEnumerable<XElement> Joueurs = ListeDonnee.Elements();
    
                    StatuOf = " ready";
                    foreach (var joueur in Joueurs)
                     results.Add(joueur.Element("Nom").Value+" "+joueur.Element("Prenom").Value);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Erreur:" + ex.Message);
                    results.Add("Hellosw");
                }
                Binding Listbinding = new Binding();
                Binding Statusbinding = new Binding();
                Listbinding.Source = results;
                this.lbContactsList.SetBinding(ItemsControl.ItemsSourceProperty, Listbinding);
                
            }
        }
    }


    et le fichier XAML qui va avec :

    <control:CustomWindow x:Class="WpfApplication.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:control="clr-namespace:Mm.Wpf.Controls;assembly=Mm.Wpf.Controls"
            Title="Mustangs de Verviers" Height="600" Width="600" WindowStartupLocation="CenterScreen" Background="#FF232323" BorderBrush="Black" Foreground="#FF232323" ResizeMode="NoResize" Cursor="None" HorizontalAlignment="Left" VerticalAlignment="Top">
        <Grid HorizontalAlignment="Left" Height="558" Margin="7,7,0,0" VerticalAlignment="Top" Width="200">
            <ListBox x:Name="lbContactsList" HorizontalAlignment="Left" Height="508" Margin="0,10,0,0" VerticalAlignment="Top" Width="200" Background="#FF2B2A2A" BorderBrush="#FF131313" Foreground="#FF838383"/>
            <StatusBar x:Name="sb" HorizontalAlignment="Left" Height="25" Margin="0,523,-374,0" VerticalAlignment="Top" Width="574" Background="{x:Null}" Foreground="#FF2B2A2A">
                <TextBlock Height="25" x:Name="InfoStatus" TextWrapping="Wrap" Text="{Binding StatuOf}" Width="574" Foreground="#FF616060"/>
            </StatusBar>
        </Grid>
    </control:CustomWindow>
    

    A savoir que j'ai tenté aussi cette methode pour le binding

    Binding Listbinding = new Binding();
                Binding Statusbinding = new Binding();
                Listbinding.Source = results;
                Statusbinding.Source = statusOf;
                this.lbContactsList.SetBinding(ItemsControl.ItemsSourceProperty, Listbinding);
                this.InfoStatus.SetBinding(ItemsControl.ItemsSourceProperty, Statusbinding);

    Mais je pense que je dois changer le itemcontrol mais je ne trouve pas par quoi!!

    merci!

    vendredi 5 septembre 2014 12:57

Réponses

  • Bonjour,

    Ta question est totallement différente du topic de départ.

    Il serait préférable de fermer cette question en la passant en résolue et d'en créer une autre avec ta nouvelle question afin de permettre a un maximum de personne du forum de participer et potentiellement, de te répondre.

    Merci

    Cédric

    • Marqué comme réponse LedNics samedi 6 septembre 2014 11:09
    samedi 6 septembre 2014 06:40

Toutes les réponses

  • Bonjour,

    plusieurs petites choses dans ce code:

    D'abord, StatuOf doit etre une property. Elle doit etre externe a la portée du constructeur. Ensuite, il faut setter le datacontext pour le mise a jour.

    Voici un petit exemple rapide de votre code:

    public string StatuOf {get;set;}
    
            public MainWindow()
            {
                InitializeComponent();
                InfoStatus.DataContext = this;
                List<string> results = new List<string> { };
                try
                {
                    StatuOf = " ready";
                    for (int i = 0; i < 10; i++ )
                        results.Add("Joueur " + i);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Erreur:" + ex.Message);
                    results.Add("Hellosw");
                }
                Binding Listbinding = new Binding();
                Binding Statusbinding = new Binding();
                Listbinding.Source = results;
                this.lbContactsList.SetBinding(ItemsControl.ItemsSourceProperty, Listbinding);
               
            }

    Avec le meme XAML

    La valeur se met a jour maintenant.

    Cordialement

    Cédric


    vendredi 5 septembre 2014 13:14
  • Merci pour la reponse peux tu m'expliquer le pourquoi de ce que tu as modifié?? Merci !


    • Modifié LedNics vendredi 5 septembre 2014 18:07
    vendredi 5 septembre 2014 17:50

  • J'aurais une autre question:

    J'aimerai en faite que lorsque je sélectionne un item il m'affiche la fiche du joueur: 

    J'ai pensé faire une recherche dans mon fichier xml avec le nom et prenom mais imaginons que j'ai deux gars qui portent le meme nom !! Du coup faudrait que je mette genre un identifiant unique et le tour et jouer!! Par contre comment je pourrais donné un <joueurid>idjoueur</joueurid> En "caché" dans ma liste ? 
    J'ai pensé a une liste en clé valeur mais est ce faisable..;?

    Edit: j'ai pensé a faire ceci:

     public class Joueur
        {
            public string IdJoueur { get; set; }
            public string NomJoueur { get; set; }
            public string PrenomJoueur { get; set; }
            public Joueur(string id, string nom, string prenom)
            {
                IdJoueur = id;
                NomJoueur = nom;
                PrenomJoueur = prenom;
            }
        }

    et donc ceci:

    List <Joueur> results = new List<Joueur>{};
    XElement ListeDonnee = XElement.Load("ListeJoueurs.xml");
                    IEnumerable<XElement> Joueurs = ListeDonnee.Elements();
                    foreach (var joueur in Joueurs)
                     results.Add(new Joueur(joueur.Element("EmpId").Value,joueur.Element("Prenom").Value,joueur.Element("Prenom").Value));

    premier soucis :

    il m'affiche W

    pfApplication.Joueur 4 fois(j'ai 4 elements) :(

    • Modifié LedNics samedi 6 septembre 2014 05:28
    vendredi 5 septembre 2014 18:06
  • Bonjour,

    Il y avais plusieur petites choses dans le code.

    Tout d'abord, la variable StatuOf était en local dans le constructeur. Donc invisible de l'extérieur.

    J'ai donc déclaré StatuOf en property de la classe MainWindow.

    Dernière étape, Il faut donner le dataContext a ton objet graphique pour permettre le Binding.

    Ici, je l'ai directement fait sur InfoStatus pour faciliter la compréhension mais on aurait pu le faire plus haut dans l'arborescence de l'UI.

    Voila, le tour est joué.

    Cédric

    samedi 6 septembre 2014 06:37
  • Bonjour,

    Ta question est totallement différente du topic de départ.

    Il serait préférable de fermer cette question en la passant en résolue et d'en créer une autre avec ta nouvelle question afin de permettre a un maximum de personne du forum de participer et potentiellement, de te répondre.

    Merci

    Cédric

    • Marqué comme réponse LedNics samedi 6 septembre 2014 11:09
    samedi 6 septembre 2014 06:40
  • Ok ok c'etait pour eviter de trop polluer :)
    samedi 6 septembre 2014 11:09