locked
Suppression Items ListPicker & Bug graphique ListPicker RRS feed

  • Question

  •  

    Bonjour a tous,

    Je débute dans le développement WP7.
    J'ai deux ListPicker, la première (Liste_Région) est alimentée au chargement de la page (Liste des régions)
    La seconde (Liste_Département) est alimentée à l’événement "SelectionChanged" de la première.

    Jusqu’à la pas trop de problèmes.
    Les deux sont bien alimentés, cependant je n'arrive pas à effacer les items de la seconde.

    Ce qui génère des doublons dès que je sélectionne un item de la première ListPicker.

    J'avais pensé a ca :

    Liste_Departement.Items.Clear();
    
    mais j'obtiens cette erreur :

    "Operation not supported on read-only collection."

    Voici mon code :

    namespace MesPetitesAnnonces.Views
    {
        public partial class Region : PhoneApplicationPage
        {
    
            #region variables 
            /// <summary>
            /// Collection permettant de recupérer la liste des départements
            /// </summary>
            ObservableCollection<DepartementModel> liste_Departement = new ObservableCollection<DepartementModel>();
    
            #endregion variables
    
            #region constructor
    
            public Region()
            {
                InitializeComponent();
                this.Loaded += new RoutedEventHandler(CreerAnnonce_Loaded);
            }
    
            #endregion constructor
    
    
            #region events
    
            /// <summary>
            /// Permet de binder la ListPicker "Région"
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void CreerAnnonce_Loaded(object sender, RoutedEventArgs e)
            {
                DataContext = App.RegionModel;
                if (!App.RegionModel.IsDataLoaded)
                {
                    App.RegionModel.LoadData();
                }
            }
    
            /// <summary>
            /// Permet l'alimentation de la deuxieme ListPicker "Departement"
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void Liste_Region_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                    ////
                    RegionModel region = (RegionModel)Liste_Region.SelectedItem;
                    int IDRegion = 0;
    
                    if (region != null)
                    {
                        IDRegion = region.NumeroRegion;
                        liste_Departement = App.DepartementModel.Load();
                        var result = liste_Departement.Where(x => x.IdRegion == IDRegion).Select(x => x).ToList();
                        Liste_Departement.Items.Clear();
                        Liste_Departement.ItemsSource = result;
      
                    }
            }
    
            #endregion events
    
    
        }
    }
    

    Autre erreur, graphique cette fois

     

    Le textblock et la listbox en dessous genere ce bug un peu génant.
    Avez vous une idée ?! :)

    Le "59 - Nord"  fait parti de la deuxième ListPicker par exemple.

    D'avance merci.

    Julien.




    jeudi 27 octobre 2011 20:06

Réponses

  • Je répondrais pour la partie graphique pour commencer :

     

     

    Mets tes listpickers dans une stackpanel, je suppose que tu les as mis dans une grid, donc quand le premier listpicker s'agrandit, ca ne déplace pas le second (en gros tu as dit : le premier est a 20 pixels du haut et le second a 60pixel du haut).

     

    En choisissant un stackpanel, tu demandes au système de les afficher l'un au dessus de l'autre (à toi de rajouter des margins si tu le souhaites), donc quand le premier s'agrandit, le second descend aussi ;)

     


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue
    • Marqué comme réponse Julien Hatzig vendredi 28 octobre 2011 09:28
    vendredi 28 octobre 2011 08:35
  • Pour le problème concernant les données, comme ça, je dirais que le problème n'est pas dans ta vue, mais dans ton modèle-vue et plus spécifiquement la dedans :

     

     

    App.DepartementModel.Load();
                    
    Je suppose, vu que je n'ai pas le code, que dans le Load tu remplis une list<Departement> mais tu ne dois pas vérifier que celle-ci est déjà rempli et tu donc a chaque appel, tu re-ajoutes les départements dedans

    class DepartementModel
    {

    private List<Departement> departements=new List<Departement>();

    public List<Departement> Load()
    {

    if(departements!=null && departements.Any())
    return departements;

    //chargement des département

    }


    } 

    Rajoute ce qui est en gras ;)

     


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue
    • Modifié rudyhuynMVP vendredi 28 octobre 2011 08:41
    • Marqué comme réponse Julien Hatzig vendredi 28 octobre 2011 09:28
    vendredi 28 octobre 2011 08:40

Toutes les réponses

  • Hello,

     

    Est-ce que tu peux essayer de faire cela :

    1. Tu créé un field _departementCourants qui est de type OBservableCollection<Departement>;
    2. Tu settes cette collection comme itemsSource de ta liste de departement,
    3. QUand tu sélectionne une région, tu clear cette collection, le deuxème listPicker devrait alors se vider,
    4. Ensuite tu remplis avec la nouvelle liste de département.

    Tiens moi au courant et bon courage ;-)

     


    Jonathan ANTOINE - Découvrez mon livre sur MVVM: http://goo.gl/N6Tmn - http://www.jonathanantoine.com
    vendredi 28 octobre 2011 08:09
  • Je répondrais pour la partie graphique pour commencer :

     

     

    Mets tes listpickers dans une stackpanel, je suppose que tu les as mis dans une grid, donc quand le premier listpicker s'agrandit, ca ne déplace pas le second (en gros tu as dit : le premier est a 20 pixels du haut et le second a 60pixel du haut).

     

    En choisissant un stackpanel, tu demandes au système de les afficher l'un au dessus de l'autre (à toi de rajouter des margins si tu le souhaites), donc quand le premier s'agrandit, le second descend aussi ;)

     


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue
    • Marqué comme réponse Julien Hatzig vendredi 28 octobre 2011 09:28
    vendredi 28 octobre 2011 08:35
  • Pour le problème concernant les données, comme ça, je dirais que le problème n'est pas dans ta vue, mais dans ton modèle-vue et plus spécifiquement la dedans :

     

     

    App.DepartementModel.Load();
                    
    Je suppose, vu que je n'ai pas le code, que dans le Load tu remplis une list<Departement> mais tu ne dois pas vérifier que celle-ci est déjà rempli et tu donc a chaque appel, tu re-ajoutes les départements dedans

    class DepartementModel
    {

    private List<Departement> departements=new List<Departement>();

    public List<Departement> Load()
    {

    if(departements!=null && departements.Any())
    return departements;

    //chargement des département

    }


    } 

    Rajoute ce qui est en gras ;)

     


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue
    • Modifié rudyhuynMVP vendredi 28 octobre 2011 08:41
    • Marqué comme réponse Julien Hatzig vendredi 28 octobre 2011 09:28
    vendredi 28 octobre 2011 08:40
  • az

    Bonjour à tous,


    Pour la partie "Alimentation ListPicker" :
    Dans mon modèle-vue j'ai mis un booléan : IsLoaded
    Au premier chargement j'ai donc mis le boolean à true et dans le code je teste si les données ont été chargée.

    if (!App.DepartementModel.IsLoaded)
    {
         liste_Departement = App.DepartementModel.Load();
    }
    


    Et ca marche impeccable :)

    Pour la partie "Graphique" :

    La solution du StackPanel marche parfaitement, cela corrige le problème.


    Merci à tous les deux.

    Julien.


    Julien.
    vendredi 28 octobre 2011 09:27
  • De rien ! A bientot sur le groupe facebook ;)
    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue
    vendredi 28 octobre 2011 13:21