Bonjour, a tous et a toutes voilà:
J'ai un problème de binding que je n'arrive pas a résoudre, je sollicite donc votre aide.
Voila je remplie un Datagrid avec des donées importées d'une feuille Excel.
Chaque lignes du tableau sont transformées en Objet et envoyés dans le datagrid.
Ma classe objet implémente bien le" INotifyPropertyChanged".
Comme suit:
namespace Test.Class
{
[DataContract]
public class Personn : INotifyPropertyChanged
{
private string name ;
private string sexe ;
private int age ;
[DataMember(Name = "Name")]
public string Name
{
get
{
return name;
}
set
{
if (value != name)
{
name = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Name"));
}
}
}
}
[DataMember(Name = "Age")]
public int Age
{
get
{
return age;
}
set
{
if (value != age)
{
age = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Age"));
}
}
}
}
[DataMember(Name = "Sexe")]
public strin Age
{
get
{
return sexe;
}
set
{
if (value != sexe)
{
sexe = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Sexe"));
}
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
}
Tout ce passe bien mon datagrid ce remplie, je pose des points d'arret sur le "set" de ma propriété Name afin de vérifier si les notifications ce font bien lorsque je change un Nom dans le datagrid... Pas de soucis ça déclenche.
Jusque la tout va bien.
Dans mon MainWindow je crée une observable collection en Static comme suit:
public static ObservableCollection<Personn> ListPersonn = new ObservableCollection<Personn>();
Pas de soucis elle se remplie bien avec toutes les données.
L'utilisateur de l'application peut ajouter des userscontrols à sa guise en runtime.
C'est Usercontrols ont une multitude de textbox.....
Et un combobox qui fait office de filtre de selection.
Je m'explique en Fonction de la l'age et du sexe on rempli les textbox avec le prenoms.
Comme suit:
Mon problème est dans le binding et la notifications des textbox et du datagrid.
Quand je change la valeur du prénom de la premiere ligne du datgrid.
Par exemple Jean devient Michel mes 8 textboxs de mon user control deviennent Michel......
Alors Que j'aurais voulu que Seulement la textbox portant le nom Jean devienne Michel.
De plus si je Change la valeur de n'importe qu'elle autre ligne la notification se fait bien mais rien ne change dans les textboxs.
Désolé pour le pavé mais je suis perdu.
Merci d'avance pour vos réponses
A voir également:
Microsoft datagrid control cannot initialize bindings
Microsoft datagrid control cannot initialize data bindings - Meilleures réponses
PS 1: plutôt que 2 clause Where, tu peux n'en écrire qu'une avec un & entre chaque conditions
PS 2: les sexes, il n'y en a que 3, Femme, Homme, Transgenre, tu aurais pu utiliser un enum, ça prend moins de place quand on sérialize, et il ne peut pas y avoir d'erreur d'orthographe.
Merci pour la réponse je vais de ce pas changer ma class en implémentant ta méthode.
C'est noté pour les balise Xaml.
Aurais- tu une idée pour éviter ce cassage de Binding?
Merci d'avance
Merci c'est super sympa.
Ca me retirerais une belle épine du pied.
Ps:j'ai trouvé une combine qui pour moi n'est pas une solution mais vraiment une combine.
C'est de rechercher toutes les combobox contenus dans les usercontrol et d'incrementer et tout de suite après de decrementer l'index des combobox. De mettre ça sur un bouton "Refresh" mais c'est vraiment du bricolage......
Salut Whismeril,
Franchement c'est plus qu'un merci que je te dois.....
Grace a ton bout de code je viens d'apprendre plus de chose en 4h que dans un mois de "confinement".
Ça fonctionne du feu de dieu Encore merci mille fois du fond du cœur.
Il y a juste un petit truc que je ne capte pas c'est le datacontext= {Binding .}.
Est ce que ça veut dire que le controle hérite du datacontext de son Parent?
Et que du coup il faut les implémenter sur tout les parents du control que l'on veut Binder?
En gros imaginons j'ai un Window qui contient un Stackpanel qui lui même contient un grid, qui contient un canvas, ect ect.....
Dois je utiliser le datacontext="{Binding .} sur tout les parents?
En tout cas je suis très content je me coucherais moins con ce soir , il me manque plus qu'a digerer tout Ca.
Il y a juste un petit truc que je ne capte pas c'est le datacontext= {Binding .}.
Est ce que ça veut dire que le controle hérite du datacontext de son Parent?
Oui, y'a des fois où ça marche sans et des fois où il le faut, alors je le mets par défaut