Bonjour,
Je désespère.
Cela fait plusieurs heures que je cherche sans résultat.
J'ai une "obervablecollection" qui est lié à un UserControl à travers une "DependencyProperty"
Ce UserControl est une combobox avec au lieu d'un "itemPresenter" une datagrid et un textbox, cela me permet de faire un filtre rapide sur les données.
J'ai donc un filtre aussi à travers d'une dependencyProperty.
Alors tout fonctionne impéccablement, au lancement de la fenêtre, tout se remplis bien, mon filtre fonctionne bien. Tout sauf quand je RECHARGE mon "observableCollection" si je n'ai pas sélectionne une valeur au préalable.
Voici comment je fais quand je recharge :
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
19
20
21
22
23 public ICommand UpdateLocalite { get { return new RelayCommand(OpenLstLocExecute, CanOpenLstLocExecute); } } bool CanOpenLstLocExecute() { return true; } void OpenLstLocExecute() { try { Localite saveSelectedLoc = new Localite(selectedEntiteCopy.Loc); (new ListeLocalite(selectedEntiteCopy.Loc, true)).ShowDialog(); collLocalite.Clear(); ILocalite iloc = facto.getILocalite(); Localite[] lstLoc = iloc.ListLocalite(); if (lstLoc != null) { foreach (Localite uneLoc in lstLoc) this.collLocalite.Add(uneLoc); } SelectedEntiteCopy.Loc = saveSelectedLoc; RaisePropertyChanged("SelectedEntiteCopy"); } catch (Exception ex) { this.ErrorMessage = ex.Message; } }
Voici le filtre appliqué sur ce UserControl :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 locCollView = CollectionViewSource.GetDefaultView(collLocalite); locCollView.Filter = o => { if (String.IsNullOrEmpty(filterLoc)) return true; else { if (((Localite)o).SCP.ToLower().Contains(filterLoc.ToLower()) || ((Localite)o).SLocalite.ToLower().Contains(FilterLoc.ToLower())) return true; else return false; } };
La raison pour laquelle c'est aussi lent, est que parfois, dans cette boucle :
A chaque ajout d'un objet, il va me parcourir tout le tableau !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 foreach (Localite uneLoc in lstLoc) this.collLocalite.Add(uneLoc);
Auriez-vous une piste ?
Partager