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

Silverlight Discussion :

ObservableCollection pas observé


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut ObservableCollection pas observé
    Bonjour,

    Un soucis trivial avec une observable collection ...

    Je bind une observable collection sur un contrôle:

    ViewModel :
    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
     
        public class MapViewModel
        {
     
            private ObservableCollection<Line> _SelectedLines = new ObservableCollection<Line>();
            public ObservableCollection<Line> SelectedLines
            {
                get
                {
                    return _SelectedLines;
                }
                set
                {
                    _SelectedLines = value;
                    RaisePropertyChanged("SelectedLines");
                }
            }
    [...]
    View :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <TextBlock Text="{Binding SelectedLines, Converter={StaticResource selectedLinesConverter}}"/>
    Converter :
    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
        public class SelectedLinesConverter : IValueConverter
        {
            #region IValueConverter Members
     
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                var lines = (IEnumerable<MapService.Line>)value;
                return string.Join(" - ", lines.Select(l => l.Name).ToArray());
            }
     
            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                throw new NotImplementedException();
            }
     
            #endregion
        }
    La méthode du converter est bien appelée au premier binding mais pas lorsque je rajoute des éléments dans mon observable collection... mais pourtant c'est bien le but de l'observable collection d'alerter quand elle est modifié ?
    Il me semblait avoir faire la même chose en WPF ...

    J'ai raté quelque chose ?

    Merci

  2. #2
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    Il semblerai qu'aucun composant ne soit abonné au "collectionchange" ... "dommage"

    Est ce que cela bien du fait que je bind sur une textbox qui se moque des observable collection ?

  3. #3
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par anthyme Voir le message
    Est ce que cela bien du fait que je bind sur une textbox qui se moque des observable collection ?
    Il semblerai...
    Si on remplace la TextBox par un ItemsControl ça fonctionne très bien même si on rajoute un élément.

    L'idée ici c'est d'appeler RaisePropertyChanged quand ta collection est modifiée.
    Seulement quand tu fais un xxx.SelectedLines.Add(new Line...); c'est le get qui est appelé donc pas de RaisePropertyChanged.

    Pour résoudre ton problème il faut que tu appelles le set de ta propriété quand tu la modifies. Je te laisse trouver le moyen le moins crade pour réussir ça

    (Mettre un RaisePropertyChanged dans le get provoque une StackOverFlowException).

  4. #4
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Peut-être qu'en t'abonnant à CollectionChanged et en appelant RaisePropertyChanged. Bon on perd un peu de l'interet de la chose mais ça fonctionne...

  5. #5
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    j ai rendu ma méthode "RaisePropertyChanged" public et je l'appel quand j ajoute dedans ...

    Pas top...

    Merci pour les pistes

Discussions similaires

  1. [WP7] ObservableCollection qui ne met pas à jour le ListBox
    Par DotNET74 dans le forum Windows Phone
    Réponses: 32
    Dernier message: 11/02/2011, 21h32
  2. INotifyPropertyChanged,ObservableCollection, marche pas dans le code ?
    Par Miguelito Loveless dans le forum Windows Presentation Foundation
    Réponses: 14
    Dernier message: 13/01/2011, 22h05
  3. [Prototype] Observer sur un form qui ne fonctionne pas
    Par Gregory.M dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 06/06/2010, 18h11
  4. [script.aculo.us] element.observer ne se met pas à jour après un ajax.updater
    Par PapyFouras dans le forum Bibliothèques & Frameworks
    Réponses: 4
    Dernier message: 16/01/2010, 11h19
  5. event.observe ne fonctionne pas sous IE
    Par mikees dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/06/2007, 18h48

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