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 :

Clear une Observable Collection et Binding dans une ListView


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 200
    Par défaut Clear une Observable Collection et Binding dans une ListView
    Bonjour,

    Je suis en train de galérer sur les ObservableCollection et les binding dans une ListView.
    J'ai remarqué que lorsqu'on clear() une ObservableCollection, si un item était sélectionné dans la ListView il va rester sélectionner après le clear().
    Ce qui pose problème lorsqu'on effectue d'autres opérations après la suppression de liste.
    J'ai essayé de faire un listView.SelectedItems.Clear() mais cela ne résout pas le problème.
    Je suis passé en Binding Mode=TwoWay sur ma listView et j'ai ajouté ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private ObservableCollection<maClasse> objectCollection = new ObservableCollection<maClasse>();
    public ObservableCollection<maClasse> ObjectCollection { get { return objectCollection ; } set { objectCollection = value; NotifyPropertyChanged("objectCollection "); }
    Je n'ai pas vraiment eu gain de cause sur mon problème ...
    Auriez-vous une solution pour palier à ce phénomène ?

    Merci par avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Peut-on en savoir plus sur la manière dont tu utilises la ListView et l'ObservableCollection?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 200
    Par défaut
    Oui c'est vrai qu'il manque un peu le contexte.
    Pour faire simple, j'ai une application WPF qui a pour fenêtre principale une ListView comme conteneur.
    J'ai également des boutons pour importer / exporter les données et faire un reset du ListView.
    Là où je rencontre des difficultés, c'est quand avant un second import, je supprime les éléments de ma liste (reset).
    Le dernier éléments sélectionné reste sélectionné après un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objectCollection.Clear();
    ou un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listView.SelectedItems.Clear();
    .
    Ce qui fait que mes tests pour savoir si un élément est sélectionné avant de procéder à des opérations sur mes items sont biaisés ainsi que la valeur du SelectedItems qui contient 2 éléments alors qu'il y en a qu'un seul sélectionné du côté de l'UI ...
    J'ai pensé que c'était une histoire de binding mais je n'en suis pas vraiment sûr.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Probablement, mais dans tous les cas, il faut nous montrer plus de code. Là par exemple il faudrait que je saches si par exemple tu as renseigné un DataContext, comment la classe associée est organisée, etc...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 200
    Par défaut
    Non je n'ai pas géré de dataContext.
    Je suis arrivé à me dépatouiller autrement, je pense qu'il faut que je me renseigne un peu plus sur le binding en mode TwoWay ...
    Connaitrais-tu un bon tuto là dessus ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Petit Rasta Voir le message
    Non je n'ai pas géré de dataContext.
    Je suis arrivé à me dépatouiller autrement, je pense qu'il faut que je me renseigne un peu plus sur le binding en mode TwoWay ...
    Connaitrais-tu un bon tuto là dessus ?
    Tu ne gère donc pas de DataContext, cela veut dire que lorsque tu associe ta liste dans le code XAML, tu indiques alors que la source est la fenêtre elle-même?

    En fait dans ce cas de figure, le DataBinding "TwoWay" n'a absolument aucune influence sauf si tu modifies le pointeur de liste "ObservableCollection", ce qui n'a aucun intérêt dans ce cas.

    le binding "TwoWay" est utile si tu peux aussi bien modifier une valeur directe aussi bien depuis la vue que depuis le modèle. Par exemple si tu as un champ texte databindé à une propriété "Toto", tu verras une modification si tu modifies aussi bien la valeur de l'IHM que la propriété "Toto" (mais dans ce dernier cas, la classe contenant la propriété "Toto" doit implémenter "INotifyPropertyChanged" et bien faire remonter le message via cette interface).

    Avec un objet "ObservableCollection", ce n'est pas pareil : grâce au fait qu'il y a une notification "CollectionChanged", il n'est pas nécessaire que la propriété "ObservableCollection" ait un accesseur "Set" puisque seuls les éléments à l'intérieur sont modifiés.

    Après, comme tu ne nous avais pas montré le code que je t'avais demandé...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/07/2007, 09h34
  2. Réponses: 40
    Dernier message: 21/06/2007, 17h58
  3. Réponses: 1
    Dernier message: 16/05/2007, 12h51
  4. [MySQL] récupérer dans une boucle chaque information MySQL dans une variable différente
    Par gtenthorey dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/05/2007, 22h34
  5. Réponses: 2
    Dernier message: 20/06/2006, 08h22

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