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 ?
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
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
Heu... oui, mais ma liste d'objet sélectionnés je la bind à quoi ?
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
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 listBox
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <DataTemplate x:Key="accessoriesListBoxItemTemplate"> <ListBoxItem IsSelected="???" Content="{Binding Path=Name}"/> </DataTemplate>
côté code, je pourrais faire quelques chose du genre<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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <bo:CRAccessoryBO></bo:CRAccessoryBO>
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
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...
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
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 ). 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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; } }
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
Cette fois-ci c'est bon (je cherche vraiment trop loin (et compliqué) ):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager