[résolu]{WPF} binding datagrid et DataGridComboBoxColumn

Résolu/Fermé
dualife_ Messages postés 153 Date d'inscription dimanche 31 mars 2013 Statut Membre Dernière intervention 21 novembre 2020 - Modifié par dualife_ le 17/07/2013 à 10:42
dualife_ Messages postés 153 Date d'inscription dimanche 31 mars 2013 Statut Membre Dernière intervention 21 novembre 2020 - 17 juil. 2013 à 10:41
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:
<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!

2 réponses

dualife_ Messages postés 153 Date d'inscription dimanche 31 mars 2013 Statut Membre Dernière intervention 21 novembre 2020 45
17 juil. 2013 à 10:31
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
0
dualife_ Messages postés 153 Date d'inscription dimanche 31 mars 2013 Statut Membre Dernière intervention 21 novembre 2020 45
17 juil. 2013 à 10:41
Bon, j'avais oublié d'utiliser proprement le debug
ç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
0