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

C# Discussion :

mvvm gére deux fenetres


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Par défaut mvvm gére deux fenetres
    bonjour ,
    je programme en c# et xaml sous visualstudio et j'essaye de respecter le paradigme MVVM
    mon problème et le suivant quand je clique sur un bouton de ma première fenêtre une seconde s'ouvre avec ds champ a remplir (textebox)
    or ces champ devrait être remplie avec divers information suivant le ligne qui est sélectionné : explication en image
    tout d'abord voici ce que j'ai réussit a faire et donc "le model" que je me suis servie pour réalisé la seconde partie
    Nom : example 2.png
Affichages : 192
Taille : 13,5 Ko
    Nom : example.png
Affichages : 184
Taille : 13,8 Ko

    j’aimerais donc faire la même chose mais avec deux fenêtre différente comme ce ci
    Nom : example 3.png
Affichages : 165
Taille : 8,7 Ko

    lorsque je clique sur le bouton un fenêtre s'ouvre avec des textebox qui devrait être remplie avec diverse info or les textebox sont vide pourtant je déclare bien les binding comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            <TextBox x:Name="textBox_Utilité" HorizontalAlignment="Left" Height="23" Margin="214,52,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" Text="{Binding TextBox_Utilité_Adresse, Mode=TwoWay }"/>
    deplus dans ma classe qui gère les binding voici le code , je ne met pas les getter et setter pour l moment je ne pense pas çà utile

    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
    16
    17
    18
    19
    20
    21
    22
     public ICommand AjouterFicheOrgAdresse
            {
                get
                {
                    if (ajouterFicheOrgAdresse == null)
                    {
                        ajouterFicheOrgAdresse = new RelayCommand<Object>((obj) =>
                        {
                            EditionAdresse fenetre = new EditionAdresse();                        
                            TextBox_Nom_Adresse = selectedTierAdresse.ADP_LIBELLE1;
                            TextBox_Utilité_Adresse = selectedTierAdresse.ADP_UTILITE1;
                            TextBox_Ligne1_Adresse = selectedTierAdresse.ADP_ADRESSE11;
                            TextBox_Ligne2_Adresse = selectedTierAdresse.ADP_ADRESSE21;
                            TextBox_Ligne3_Adresse = selectedTierAdresse.ADP_ADRESSE31;
                            TextBox_Ligne4_Adresse = selectedTierAdresse.ADP_ADRESSE41;
                            TextBox_Codepost_Adresse = selectedTierAdresse.ADP_COD_POST_G1;
                            TextBox_Pays_Adresse = selectedTierAdresse.ADP_PAYS1;
                            TextBox_Ville_Adresse = selectedTierAdresse.ADP_VILLE1;
                            TextBox_Region_Adresse = selectedTierAdresse.ADP_REGION1;
                           Console.WriteLine("nom"+ TextBox_Nom_Adresse+
                               "code postal "+ TextBox_Codepost_Adresse);
                            fenetre.Show();
    les plus étrange et que mon console.write m'écrit bien les bonne information mais les textebox reste vide
    si vous avez une idée n’hésiter pas merci d'avance

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Par défaut
    ha il manque une image Nom : example 4.png
Affichages : 216
Taille : 135,6 Ko

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 612
    Par défaut
    Bonjour quinroux,

    Peux-tu nous dire où sont déclarer tes variables "TextBox_Nom_Adresse" et similaire?


    Lorsque tu créé un binding, quel est la source exploité?
    ....
    ...
    ..
    .
    Le DataContext de la fenêtre contenant le contrôle bindé


    Alors pourquoi tu fait si compliqué?
    Le binding c'est magique, la boite A doit afficher le contenu B, alors il faut la faire pointé sur B.


    Ton exemple (si correctement interprété)
    liste => élément sélectionné => stockage de chaque properties dans une variable => binding {variable <=> controle}

    2 problèmes:
    1 - Maintenabilité : si tu ajoute un champs tu doit impacté tout le process
    2 - Cohérence/Traitement bonus : si tu modifie ton adresse dans la fenêtre 2 il faut pensé à modifier l'objet dans la liste

    Méthodologie conseillé:
    binding { liste.élément sélectionné.property <=> controle}
    1 - Maintenabilité : tu ajoute une property à ton objet, tu ajout un controle et positionne le bon binding => bingo!
    2 - Cohérence/Traitement bonus : si tu modifie ton adresse dans la fenêtre 2 par binding l'objet dans la liste est à jour => bingo!


    Lorsque tu créé un binding, quel est la source exploité?
    ....
    ...
    ..
    .
    Le DataContext de la fenêtre contenant le contrôle bindé

    Que dois-tu donc mettre dans fenetre2.DataContext?

    2 réponses possible suivante l'utilisation de ta fenêtre.

    J'attends tes propositions

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Par défaut
    bonjour TheBlackReverant et merci ,
    d’abord voici les fichier de mon projet,
    Nom : arbre.png
Affichages : 157
Taille : 16,9 Ko
    je déclare mes "variable" dans fichetiers qui contient également ma fonction AjouterFicheOrgAdresse
    je me suis mal exprimer en fait je ne binde pas sur des variable mais sur des méthode conteant des getter et setter sur une variable privée

    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
    16
    17
    18
     
     private string textBox_Nom_Adresse;
     public string TextBox_Nom_Adresse
            {
                get
                {
                    return textBox_Nom_Adresse;
                }
     
                set
                {
                    if (textBox_Nom_Adresse != value)
                    {
                        textBox_Nom_Adresse = value;
                        NotifyPropertyChanged();
                    }
                }
            }
    pour le DataContext j'ai mis le même que pour la première fenêtre ficheTiers,
    a savoir que si je fais un copié coller d'une textebox avec les même propriété dans la première fenêtre celle ci marche très bien elle m'affiche le texte que je veux donc je ne pense pas que le problème vienne du binding après je peux me trompé

    enfin j'ai réussit en contournant le problème mais je n'aime pas cette solution voila l’alternative:

    méthode contenue dans editionadresse.xaml.cs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
            public void EditionAdressecomp(string nom , string utilité , string ligne1, string ligne2, string ligne3, string ligne4, string codepostal, string pays, string ville, string region)
            {
                InitializeComponent();//nomtextebox.text = parametre
                textBox_Nom.Text = nom;
                textBox_Pays.Text = pays;
                textBox_Region.Text = region;
                textBox_Utilité.Text = utilité;
                textBox_Ville.Text = ville;
                textBox_Codepost.Text = codepostal;
                textBox_Ligne1.Text = ligne1;
                textBox_Ligne2.Text = ligne2;
                textBox_Ligne3.Text = ligne3;
                textBox_Ligne4.Text = ligne4;
            }

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 612
    Par défaut
    des méthode conteant des getter et setter sur une variable privée
    => cela s'appelle des propriétés


    Tout est à faire par binding, oubli tes méthodes / propriétés / variables

    ton DataContext expose l'objet Adresse sélectionné (selectedTierAdresse) alors pourquoi ne pas pointé directement sur celui-ci?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <TextBox x:Name="textBox_Utilité" HorizontalAlignment="Left" Height="23" Margin="214,52,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" Text="{Binding selectedTierAdresse.ADP_UTILITE1, Mode=TwoWay }"/>

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Par défaut
    => cela s'appelle des propriétés
    merci pour l'info , sinon j'ai tester ta solution et ça ne fonctionne quand même pas retour au point de départ la textbox reste vide

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

Discussions similaires

  1. pb avec deux Fenetres ?
    Par bliml dans le forum Interfaces Graphiques en Java
    Réponses: 5
    Dernier message: 15/03/2007, 18h11
  2. Communication entre deux fenetres qui n'ont pas de lien de parenté
    Par Invité dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 02/09/2006, 16h58
  3. Lier deux fenetres
    Par V_R46 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 22/07/2006, 16h53
  4. Réponses: 10
    Dernier message: 30/05/2006, 17h33
  5. Imbriquer deux fenêtres ?
    Par Eldered dans le forum wxWidgets
    Réponses: 3
    Dernier message: 17/05/2006, 00h32

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