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 :

WPF Bind add new item dans une DataGrid


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur C#
    Inscrit en
    Avril 2011
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur C#
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 348
    Par défaut WPF Bind add new item dans une DataGrid
    Bonjour,

    Je suis toujours en cours d'apprentissage en WPF et le MVVM.

    je bloque :

    J'ai une datagrid, j'aimerai détecter l'ajout d'une ligne dans cette datagrid pour pouvoir l'insérer dans la DB, comment puis-je faire cela sans code-behind, seulement VM ?

    J'ai donc lié ma datagrid à une collection

    View Model :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ObservableCollection<Activite> actiColl = new ObservableCollection<Activite>();
     
            public ObservableCollection<Activite> ActiColl
            {
                get { return actiColl; }
                set { actiColl = value; }
            }
    XAML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ItemsSource="{Binding ActiColl} "
    J'ai ensuite lié l'élement sélectionné à une propriété du VM

    XAML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SelectedItem="{Binding Acti, UpdateSourceTrigger=PropertyChanged}
    VM :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            Activite acti;
            public Activite Acti
            {
                get { return acti; }
                set 
                {
                    acti = value;
                }
            }
    A quel moment ET comment puis-je réceptionner le fait que j'ajout une ligne dans la datagrid ? Ma "ObservableCollection" se met bien a jour mais je n'arrive pas à trouver le moment ou cela se fait pour mettre à jour ma DB.

  2. #2
    Membre éprouvé
    Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 99
    Par défaut
    Tu as un évènement très utile pour ça : CollectionChanged
    Grâce à lui, tu vas pouvoir connaitre si un élément a été ajouté, supprimé, modifié.

    Code c# : 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
    public MyViewModel()
            {
                ActiColl= new ObservableCollection<Activite>();
                ActiColl.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(ActiColl_CollectionChanged);
            }
     
            void ActiColl_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
            {
                if (e.NewItems != null)
                {
                    // Add
                }
     
                if (e.OldItems != null)
                {
                    // Remove
                }
            }

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur C#
    Inscrit en
    Avril 2011
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur C#
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 348
    Par défaut
    Bonjour Lordinaire,

    Merci beaucoup, c'est merveilleux, en effet cela fonctionne :-)
    Il reconnais bien un nouvel objet ou un objet supprimé.

    Est-ce qu'on peux faire cela pour d'autres event ?
    Par exemple "EndEdit" ?

  4. #4
    Membre éprouvé
    Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 99
    Par défaut
    Le cas du EndEdit est un peu différent car c'est une méthode appelée par le contrôle directement. Dans ce cas, le plus simple est d'utiliser le code-behind pour faire l'ajout ou appeler une méthode dans le ViewModel qui s'en chargera.

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur C#
    Inscrit en
    Avril 2011
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur C#
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 348
    Par défaut
    Imaginons que je veuille réceptionner une valeur après l'avoir encodée (sans utilisée du code behind)

    En fait avec la méthode donnée, je récupère le fait qu'un objet est ajouté.
    Mais, je ne récupère pas les données ajoutées dans cet objet.

    Comment puis-je faire pour les avoir ces données ?

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur C#
    Inscrit en
    Avril 2011
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur C#
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 348
    Par défaut
    De ce que j'ai pu remarque avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiColl_CollectionChanged
    Je n'ai la possibilité de voir que si :

    ma collection à été :

    -ajoutée
    -déplacée
    -supprimée
    -remplacée
    -reset

    Mais je ne vois pas de possibilité de check une modification dans l'objet lui même


    C'est après avoir inséré les données que je voudrais faire mon insertion dans ma db :-)

  7. #7
    Membre éprouvé
    Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 99
    Par défaut
    Citation Envoyé par draco951 Voir le message
    Imaginons que je veuille réceptionner une valeur après l'avoir encodée (sans utilisée du code behind)

    En fait avec la méthode donnée, je récupère le fait qu'un objet est ajouté.
    Mais, je ne récupère pas les données ajoutées dans cet objet.

    Comment puis-je faire pour les avoir ces données ?
    e.NewItems contient la liste des nouveaux éléments, tu as donc accès à toutes les données de ces objets.

    Dans ton scénario, tu veux forcement sauvegarder dès la fin de la modification d'une ligne ? Pas d'appuie sur un bouton Save ?

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

Discussions similaires

  1. C# et WPF : comment afficher des données dans une DataGrid (to bind or not to bind ?!?)
    Par jmnicolas dans le forum Windows Presentation Foundation
    Réponses: 8
    Dernier message: 31/05/2010, 15h03
  2. Réponses: 2
    Dernier message: 01/03/2010, 21h32
  3. [WPF {toolkit}] Comment avoir un double header dans une DataGrid ?
    Par XREvo dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 28/01/2010, 15h31
  4. Add Item dans une Jlist
    Par batmat dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 04/04/2008, 16h18
  5. Réponses: 2
    Dernier message: 21/08/2006, 21h27

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