none
Mise à jour IHM depuis ObservableCollection? RRS feed

  • Question

  • Salut à tous,
    J’avais une question suite à un problème que je rencontre : 

    J’ai une page qui affiche une collection d’item (jusque-là, c’est classique). Je relie cette collection à ma source de donnée dans le xaml par

    <CollectionViewSource
         x:Name="itemsViewSource"
         Source="{Binding Items}"
    />

    Puis dans mon code-behind, dans la méthode OnNavigatedTo, je fais un 

    this.DefaultViewModel["Items"] = BTasksDataSource.ActiveItems; 

    pour relier ma source de données à mon affichage.

    Problème : Le chargement des données dans mon ObservableCollection (ma fameuse « BTasksDataSource.ActiveItems ») se fait de manière asynchrone  ce qui fait que ma page est affichée à l’écran alors que le chargement n’est pas terminé.
    Mais lorsque le chargement est terminé, mon affichage ne se met pas à jour.

    L’ObservableCollection ne devrait-elle pas notifier un changement à l’IHM ? l’IHM ne devrait-elle pas se mettre à jour automatiquement ?

    Si vous avez quelques précision la-dessus, je suis tout ouïe.
    Merci d’avance.


    Christophe H.

    • Déplacé Aurel Bera jeudi 20 septembre 2012 13:25 (Origine :Développement Windows 8 )
    jeudi 21 juin 2012 09:33

Réponses

  • Alors pour mettre à jour mon propre post, voici l'explication et la solution que j'ai trouvé à mon problème : 

    Après chaque modification de l'ObservableCollection, je faisais appel à une méthode qui devait trier mes éléments comme ceci : 

    var ActiveSortedTasks = ActiveItems.OrderBy(BTask => BTask.Publication).Reverse();
    ObservableCollection<BTask> _ActiveBTasksSorted = new ObservableCollection<BTask>(ActiveSortedTasks);
    ActiveItems = _ActiveBTasksSorted;

    Apparemment le fait de ré-assigner la valeur de "ActiveItems" lui enlève sa capacité à notifier les changements (l'envoi des évènements type "CollectionChanged"). Oui je sais ça parait fou/bizarre mais c'est vraiment ce que j'ai constaté puisque dès lors que j'ai commenté ces lignes, tout a fonctionné.

    Si quelqu'un a plus d'explications, je suis preneur!


    Christophe H.

    lundi 25 juin 2012 09:50