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 :

Binding modéle MVVM


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2021
    Messages : 13
    Par défaut Binding modéle MVVM
    Bonsoir à tous.

    Voila, je bloque complétement sur le principe du binding.


    ComboBox, TextBox (Box_Recherche) et Bouton dans le MainWindow

    Nom : Capture.PNG
Affichages : 152
Taille : 1,7 Ko



    Deux TextBox dans une UserControl que je mets dans un dossier "View" et que j'appelle "Information"

    Nom : Capture2.PNG
Affichages : 142
Taille : 1,3 Ko




    J'ajoute "Information" dans mon MainWindows

    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            <Grid x:Name="Information" Grid.Row="3" Grid.Column="0" Grid.RowSpan="1" Grid.ColumnSpan="12">
                <view:Information/>
            </Grid>


    Je créé deux autre dossiers

    - Models
    - ModelView

    Dans Models je créé une class que j'appelle "Variable_Information"
    Dans ModelView je créé une class que j'appelle "ModelView_Information"

    Dans la class "Variable_Information"



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class Information
        {
            public string Information1 { get; set; }
            public string Information2 { get; set; }
        }


    Dans ma class "ModelView_Information"

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    // Je n'oublie pas les using
     
     
    public class ModelView_Information
        {
            public Variable_Information Variable_Information { get; set; }
     
            public ModelView_Information()
            {
     
                string sourceConstr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\Users\Utilisateur\Desktop\BDD.xlsx';Extended Properties='excel 8.0;HDR=Yes;IMEX=1'";
     
                try
                {
                    OleDbConnection Connexion = new OleDbConnection(sourceConstr);
                    Connexion.Open();
                    OleDbCommand cmd = new OleDbCommand("select * from [Feuil1$] where [" + ComboBox + "]= '" + Box_Recherche + "'", Connexion);
                    OleDbDataReader dr = cmd.ExecuteReader();
                    dr.Read();
     
                    if (dr.HasRows)
                    {
                        Variable_Information.Information1= dr[0].ToString();
                        Variable_Information.Information2= dr[1].ToString();
                    }
                    else
                    {
                    }
     
                    Connexion.Close();
                }
                catch
                {
                    MessageBox.Show("Impossible de se connecter à la base de donnée. Veuillez réessayer", "Erreur BDD", MessageBoxButton.OK, MessageBoxImage.Information);
                }
            }
        }

    Dans le code behind de MainWindow je créé un event Click sur le bouton.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private void Bouton_Recherche_Click(object sender, RoutedEventArgs e)
            {
                ModelView_Information modelView_information = new ModelView_Information();
     
                Information.DataContext = modelView_information;
            }

    Pour finir je fait un binding sur les TextBox dans mon UserControl "Information".

    Information1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Text="{Binding Variable_Information.Information1}

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Text="{Binding Variable_Information.Information2}

    Mes problèmes sont les suivants:

    - Je ne récupère pas les valeurs de mes variable et rien ne s'affiche dans UserControl "Information". Sauf si je déclare mes variables dans la class "ModelView_Information"
    - Je n'arrive pas à récupérer la valeur de Box_Recherche et du choix ComboBox
    - Si je mets ModelView_Information dans le DataContext de mon UserControl "Information", tout s'exécute avant que j'appuie sur le bouton.


    Merci pour vos réponses

  2. #2
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 204
    Par défaut
    Bonsoir,

    Pouvez-vous me joindre en fichier joint (zip) votre projet ?

    Merci.

  3. #3
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2021
    Messages : 13
    Par défaut
    Voici

    Proyet.7z

    Merci à vous

  4. #4
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 204
    Par défaut
    Bonjour,

    Vous ne savez pas utiliser le débogeur de Visual Studio ? Le projet était en Release, dans ce cas impossible de trouver le soucis facilement... Il faut vous mettre en Debug et seulement en Release lorsque vous souhaitez publier votre application.

    Votre code ne fonctionne pas car la propriété variable_information dans la classe ModelView_Information n'est pas public, donc votre "vue" n'y à pas accès et elle n'est pas non plus allouée...

    J'ai réduit volontairement le code car je n'ai pas votre provider de base de données, mais vous devriez pouvoir vous y retrouver :

    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 class ModelView_Information
        {
            public Variable_Information variable_information { get; set; }
     
            public ModelView_Information()
            {
                variable_information = new Variable_Information();
     
                variable_information.Utilisateur = "Albert";
                variable_information.Telephone = "0123456789";
                variable_information.Adresse = "le bourg";
            }
        }
    Par contre, il ne faut surtout pas appeler des éléments de la "vue" dans vos "viewmodels", comme Combobox_Recherche.Text. En plus d'être inaccessible, cela crée un lien fort avec la "vue" ce qui n'est pas propre en WPF/MVVM.

    Il y a plein d'autres choses à redire sur votre code mais je comprends bien que vous êtes débutant. Je vais voir pour vous créer un petit projet basé sur le votre avec du MVVM propre pour que vous voyez la différence

  5. #5
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2021
    Messages : 13
    Par défaut
    Bonjour,

    Merci beaucoup pour votre retour. Effectivement je suis débutant et complétement autodidacte sur ces projets.

    j'ai changé la propriété variable_information comme indiqué en public et instancié ensuite. Mais le binding ne fonctionne pas, la propriété Text de mes TextBox sont vide.

    Concernant : "Par contre, il ne faut surtout pas appeler des éléments de la "vue" dans vos "viewmodels", comme Combobox_Recherche.Text. En plus d'être inaccessible, cela crée un lien fort avec la "vue" ce qui n'est pas propre en WPF/MVVM"

    Je voulais simplement vous montrer les variables que j'utilise dans ma requête. En fonction du choix sélectionné dans le ComboBox et le Texte dans Box_Recherche. Cependant je n'ai pas la solution car j'ai commencé par coder directement dans MainWindow sur les events (comme un bon débutant ). Je n'ai pas encore la logique MVVM.

  6. #6
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 204
    Par défaut
    Voici un idée de petit projet MVVM

    C'est très succinct, il manque l'injection de dépendance, des interfaces en plus des classes pour découpler encore un peu plus.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Implémentation de INotifyPropertyChanged dans un modèle MVVM
    Par calvi2002 dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 17/04/2013, 10h15
  2. [MVVM] Problème Binding PushPin MVVM
    Par matll dans le forum Windows Phone
    Réponses: 9
    Dernier message: 23/04/2012, 21h03
  3. [C#] combobox WPF modèle MVVM
    Par july4474 dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 29/11/2010, 18h16
  4. Binding Cursor MVVM ?
    Par alves.seb dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 20/11/2009, 14h45
  5. Modèle MVVM - Implémentation ICommand
    Par Robin56 dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 23/06/2009, 16h00

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