[résolu]{WPF} binding datagrid et DataGridComboBoxColumn
Résolu
dualife_
Messages postés
153
Date d'inscription
Statut
Membre
Dernière intervention
-
dualife_ Messages postés 153 Date d'inscription Statut Membre Dernière intervention -
dualife_ Messages postés 153 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je cherche a faire un binding un poil alambiqué et je ne trouve pas de solution!
objectif:
avoir une datagrid qui me liste des fichiers avec leurs caractéristiques (chemin, nom, a jour etc...) et avoir une colonne supplémentaire imprimante sous forme de combobox qui liste toutes les imprimantes et qui assigne à la sélection l'imprimante choisie sur l'objet fichier courant dans le datagrid
ce que j'ai:
un datagrid qui liste mes fichiers avec une colonne qui contiens la combobox avec la liste des imprimantes MAIS qui n'assigne pas l'imprimante sélectionnée dans l'objet fichier qui est une classe custom, l'imprimante est stockée en string.
le code:
voila donc c'est le selectedItemBinding qui semble ne pas fonctionner... je ne pense pas que ce soit un problème de MAJ entre WPF et le code métier puisque je peux modifier la quantité et c'est bien répercuté dans la classe du fichier.
Auriez vous des pistes?
Merci!
Je cherche a faire un binding un poil alambiqué et je ne trouve pas de solution!
objectif:
avoir une datagrid qui me liste des fichiers avec leurs caractéristiques (chemin, nom, a jour etc...) et avoir une colonne supplémentaire imprimante sous forme de combobox qui liste toutes les imprimantes et qui assigne à la sélection l'imprimante choisie sur l'objet fichier courant dans le datagrid
ce que j'ai:
un datagrid qui liste mes fichiers avec une colonne qui contiens la combobox avec la liste des imprimantes MAIS qui n'assigne pas l'imprimante sélectionnée dans l'objet fichier qui est une classe custom, l'imprimante est stockée en string.
le code:
<DataGrid ItemsSource="{Binding Sheets}" AutoGenerateColumns="False" DockPanel.Dock="Bottom" CanUserAddRows="False"> <DataGrid.Columns> <DataGridTextColumn Header="Chemin de fichier" Binding="{Binding FilePath}" IsReadOnly="True" Width="200"/> <DataGridTextColumn Header="Nom de fichier" Binding="{Binding FileName}" IsReadOnly="True"/> <DataGridTextColumn Header="Nom de mise en plan" Binding="{Binding Name}" IsReadOnly="True"/> <DataGridCheckBoxColumn Header="A jour" Binding="{Binding Updated}" IsReadOnly="True"/> <DataGridTextColumn Header="Format" Binding="{Binding Format}" IsReadOnly="True"/> <DataGridComboBoxColumn Header="Imprimante" SelectedItemBinding="{Binding SelectedPrinter}" DisplayMemberPath="Name" ItemsSource="{Binding KnowPrinters, Source={StaticResource AppParams}}"/> <DataGridTextColumn Header="Quantité" Binding="{Binding PrintQuantity}"/> <DataGridCheckBoxColumn Header="A été imprimé" Binding="{Binding Printed}" IsReadOnly="True"/> </DataGrid.Columns> </DataGrid>
voila donc c'est le selectedItemBinding qui semble ne pas fonctionner... je ne pense pas que ce soit un problème de MAJ entre WPF et le code métier puisque je peux modifier la quantité et c'est bien répercuté dans la classe du fichier.
Auriez vous des pistes?
Merci!
A voir également:
- [résolu]{WPF} binding datagrid et DataGridComboBoxColumn
- Problème curseur souris incontrolable résolu - Forum Virus
- Souris incontrôlable temporairement à chaque démarrage ✓ - Forum Windows 10
- Binding entities to query parameters only allowed for entities that have an identifier. ✓ - Forum PHP
- Panne chromecast résolu - Guide
- Recuperation d'un entité appartir d'un repository avec symfony 3 - Forum PHP
2 réponses
Après debug je constate que la string SelectedPrinter contient le ToString() de ma classe Printer soit "MonNamespace.Model.Printer" comment lui dire de faire le binding sur ce qui est affiché dans le DataGridComboBoxColumn? soit la propriété Name que je force en fesant DisplayMemberPath="Name"?
dois-je overrider la méthode ToString()? ça ne me semble pas la façon la plus propre de le faire
dois-je overrider la méthode ToString()? ça ne me semble pas la façon la plus propre de le faire
Bon, j'avais oublié d'utiliser proprement le debug
ça m'a permis de trouvé très rapidement...
donc pour résumer ca donne :
il fallait utiliser SelectedValueBinding qui etait bien bindé sur ma variable string et préciser par contre la variable a utilisé comme source du binding puisque de base il utilisait mon printer.ToString() alors que je voulais la propriété printer.Name; donc je lui ai indiqué ca grâce a SelectedValuePath="Name" dont l'origine est mon printer.
Merci pour rien^^ il faillait que je l'explique clairement pour comprendre XD
ça m'a permis de trouvé très rapidement...
donc pour résumer ca donne :
<DataGridComboBoxColumn Header="Imprimante" SelectedValueBinding="{Binding SelectedPrinter}" SelectedValuePath="Name" DisplayMemberPath="Name" ItemsSource="{Binding KnowPrinters, Source={StaticResource AppParams}}"/>
il fallait utiliser SelectedValueBinding qui etait bien bindé sur ma variable string et préciser par contre la variable a utilisé comme source du binding puisque de base il utilisait mon printer.ToString() alors que je voulais la propriété printer.Name; donc je lui ai indiqué ca grâce a SelectedValuePath="Name" dont l'origine est mon printer.
Merci pour rien^^ il faillait que je l'explique clairement pour comprendre XD