[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   -
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   Statut Membre Dernière intervention   45
 
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   Statut Membre Dernière intervention   45
 
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