Bonjour
J'ai une listBox liée (binding) à une collection. j'aimerais qu'une partie de ses éléments soient sélectionnés "par défaut" en fonction du contenu d'une autre collection. est-ce possible ?
Version imprimable
Bonjour
J'ai une listBox liée (binding) à une collection. j'aimerais qu'une partie de ses éléments soient sélectionnés "par défaut" en fonction du contenu d'une autre collection. est-ce possible ?
Hum... à première vue, je dirais en passant par le binding, un DataTemplate et IsSelected, ca devrait le faire :)
Heu... oui, mais ma liste d'objet sélectionnés je la bind à quoi ? :?
Help...
ok, je vois ce que tu veux dire.
Mais je n'y parviens toujours pas. Comment faire pour vérifier si un item se trouve dans ma collection d'objets sélectionnés ?
ma tentative de template
ma listBoxCode:
1
2
3
4 <DataTemplate x:Key="accessoriesListBoxItemTemplate"> <ListBoxItem IsSelected="???" Content="{Binding Path=Name}"/> </DataTemplate>
côté code, je pourrais faire quelques chose du genreCitation:
<ListBox x:Name="AccessoriesListBox"
ItemsSource="{Binding Source={StaticResource odpAccessories}}"
ItemTemplate="{StaticResource accessoriesListBoxItemTemplate}"
SelectionMode="Multiple"
SelectionChanged="AccessoriesListBox_SelectionChanged"
/>
Mais est-il possible d'exécuter quelque chose de ce genre depuis la template ?Code:
1
2 MaListeDObjetsSelectionnes.Contains(UnItemDeLaListeDObjets)
Je vois bien une possibilité mais elle est un peu lourde :?
Tu utilises un ObjectDataProvider dans ton XAML et dans ton code, tu as un méthode qui fait le Contains. Ensuite, tu bindes IsSelected à ton ODP (qui utilisera la méthode que tu auras défini).
Mais c'est franchement pas génial :?
Ok
J'ai essayé, mais je ne comprends pas comment passer le paramètre à la méthode.
mes ODP. Pour le 2e je ne sais pas si j'ai fais juste.
Code:
1
2
3
4
5
6
7
8 <ObjectDataProvider x:Key="odpAccessories" /> <ObjectDataProvider x:Key="odpSelectedAccessories" ObjectType="{x:Type boCol:CRAccessoriesCollection}" MethodName="Contains"> <ObjectDataProvider.MethodParameters> <bo:CRAccessoryBO></bo:CRAccessoryBO> </ObjectDataProvider.MethodParameters> </ObjectDataProvider>
ma template. Ici il faudrais que j'appelle la méthode Contains en lui passant l'item, mais heu... comment qu'on fait :koi: ?
Code:
1
2
3
4 <DataTemplate x:Key="accessoriesListBoxItemTemplate"> <ListBoxItem Content="{Binding Path=Name}" IsSelected="{Binding Source={StaticResource odpSelectedAccessories}}" /> </DataTemplate>
En faisant du binding sur tes listbox ?Code:
1
2 <bo:CRAccessoryBO></bo:CRAccessoryBO>
Heu... Je ne suis plus très sûr que je pense à la même chose que toi :?
Dans le binding que j'ai mis dans le IsSelected, il faut bien j'appelle la méthode Contains, non ? Et je dois lui passer l'objet CRAccessoryBO (le listBoxItem) courant. C'est pas à ça que tu pensais ?
Hum.. là, je commence à plus rien comprendre, c'est un peu trop fouilli... Il serait bien de tout reposer à plat et de voir si tu t'en sors plus simplement...
Alors voilà :
J'ai une listBox et deux collections. La première contient une liste d'accessoires. La deuxième contiens les accessoires qui auront été sélctionnés dans la liste.
Lorsque je démarre l'application, je voudrais que les éléments de la la 1e collection (la listBox) soient sélectionnés s'ils se trouvent dans la 2e collection.
Toutes ces données proviennent d'une base de données.
Après réflexion, je me demande si je ne pourrais pas gérer tout ça côté code. Mais pour ça il faudrais que je fasse quelques modification... je vais essayer...
[mode hors-sujet]
Je viens de relire ton article sur le développement en couche. et j'ai une question (oui, encore :lol:). Si on sais qu'une classe ne sera pas instanciée plusieurs fois, y a-t-il un intérêt à utiliser un singleton ? A la limite, une classe contenant des méthodes statiques ne pourrait-elle pas suffire
[mode hors-sujet]
Bon ça devrait aller.
J'ai fait ceci :
Juste un problème, le cast ne fonctionne pas. Logique puisque Items contient des objets de type CRAccessoryBO. Je pensais me servir de la méthode FindParentOfType que tu m'avais donné il y a quelque temps mais le problème est qu'elle à besoin d'un DependencyObject en paramètre. Arrgghhhh !!!Code:
1
2
3
4
5
6
7
8
9
10
11 int nbItems = AccessoriesListBox.Items.Count; for(int i=0; i<nbItems; i++) { if (CRCollections.Reports.Current.UsedAccessories.Contains((CRAccessoryBO)AccessoriesListBox.Items[i])) { ((ListBoxItem)AccessoriesListBox.Items[i]).IsSelected = true; } }
:mur::mur::mur:
Cette fois-ci c'est bon (je cherche vraiment trop loin (et compliqué) :roll: ):
Code:
1
2
3
4
5
6
7
8
9
10
11
12 ObservableCollection<Object> tmp = new ObservableCollection<Object>(); foreach (CRAccessoryBO accessory in CRCollections.Reports.Current.UsedAccessories) { tmp.Add(accessory); } foreach (CRAccessoryBO accessory in tmp) { AccessoriesListBox.SelectedItems.Add(accessory); }
Ok, mais est-ce qu'il peut y avoir (dans ce cas là) un intérêt à utiliser un singleton plutôt qu'une classe statique ?