WPF - ObjectDataProvider

Le
Clark [MVP CRM]
Bonjour

J'ai un problème dans un développement WPF.
Dans un usercontrol, je déclare dans la section resources, un
objectdataprovider :

<!--Source pour la combobox Gérants-->
<ObjectDataProvider x:Key="GerantsValues" MethodName="GetGerants"
ObjectType="{x:Type BLL:CompteManager}"/>

Celui-ci pointe sur une méthode static dans un autre projet :

public static IEnumerable<ConsoPTF.Gerant> GetGerants()
{
if (db == null)
db = new ConsoPTFDataContext(ConnectionString);
return( from g in db.Gerants
select g);
}

Le dataContext est initialisé avec une variable static "ConnectionString"
chargée au lancement de l'application.
Toutes mes classes proviennent d'un fichier dbml créé à partir de ma base
SQL Server, donc Linq to SQL

Dans mon usercontrol j'affiche une Combobox placée dans un Grid dont le
datacontext est bindé à une instance de ma classe Compte

<Grid Grid.Row="0" Name="CompteGrid" DataContext="{Binding
ElementName=compte}">
.
<ComboBox Name="GerantsComboBox"
ItemsSource="{Binding Source={StaticResource
GerantsValues}}"
DisplayMemberPath="ClasserSous"
SelectedValuePath="CodeBIP"
SelectedValue="{Binding Path=CodeGerant}" />


Lorsque je lance l'application et que j'ouvre un compte, ma combobox
m'affiche bien la valeur "ClasserSous" correspond à la propriété de ma
classe compte CodeGerant (l'équivalent de CodeBIP dans ma classe Gerants)
mais dans le designer j'ai toujours cette erreur :

Error 1 Value cannot be null.
Parameter name: fileOrServerOrConnection C:UsersgblDocumentsVisual
Studio
2008ProjectsAURISGestionAURISGestion.WPFUIUserControlsucCompte.xaml 165
9 AURISGestion.WPFUI

Je pense que ça a un rapport avec la façon dont j'instancie mon datacontext
mais je ne vois pas où je me trompe

De plus, dans mon usercontrol, j'intercepte l'événement
this.compte.PropertyChanged += new
PropertyChangedEventHandler(compte_PropertyChanged);
afin de savoir si une propriété a été modifiée et dans ce cas proposer
l'enregistrement à la fermeture. Ca fonctionne pour toutes les propriétés
sauf pour celles bindées à des combobox (j'en ai plusieurs comme l'exemple
ci-dessus et toutes ont la même erreur).
Je ne sais pas si c'est liée ou si c'est un autre problème mais je sèche.

Merci d'avance.
--
Cordialement
Clark
Mon nouveau blog : http://blogs.codes-sources.com/clark
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Clark [MVP CRM]
Le #12145631
Bonjour
J'ai contourné finalement mon problème de cette façon
Je crée mon ObjectDataProvider de cette façon :
<ObjectDataProvider x:Key="GerantsValues"/>
Et je l'instancie dans le constructeur du UserControl :
ObjectDataProvider odpGerants =
this.FindResource("GerantsValues") as ObjectDataProvider;
if (odpGerants != null) odpGerants.ObjectInstance =
CompteManager.GetGerants();
Pas très satisfaisant mais au moins je n'ai plus le bug d'affichage...
Pour l'évenement propertychanged qui n'était pas levé par un changement de
valeur de la combobox, il manquait bêtement Mode=TwoWay dans le Binding :
<ComboBox Name="GerantsComboBox" Width="150"
ItemsSource="{Binding Source={StaticResource
GerantsValues}}"
DisplayMemberPath="ClasserSous"
SelectedValuePath="CodeBIP"
SelectedValue="{Binding Path=CodeGerant,
Mode=TwoWay}" />

--
Cordialement
Clark
Mon nouveau blog : http://blogs.codes-sources.com/clark


"Clark [MVP CRM]" news:
Bonjour

J'ai un problème dans un développement WPF.
Dans un usercontrol, je déclare dans la section resources, un
objectdataprovider :

<!--Source pour la combobox Gérants-->
<ObjectDataProvider x:Key="GerantsValues" MethodName="GetGerants"
ObjectType="{x:Type BLL:CompteManager}"/>

Celui-ci pointe sur une méthode static dans un autre projet :

public static IEnumerable {
if (db == null)
db = new ConsoPTFDataContext(ConnectionString);
return( from g in db.Gerants
select g);
}

Le dataContext est initialisé avec une variable static "ConnectionString"
chargée au lancement de l'application.
Toutes mes classes proviennent d'un fichier dbml créé à partir de ma base
SQL Server, donc Linq to SQL

Dans mon usercontrol j'affiche une Combobox placée dans un Grid dont le
datacontext est bindé à une instance de ma classe Compte

<Grid Grid.Row="0" Name="CompteGrid" DataContext="{Binding
ElementName=compte}">
....
<ComboBox Name="GerantsComboBox"
ItemsSource="{Binding Source={StaticResource
GerantsValues}}"
DisplayMemberPath="ClasserSous"
SelectedValuePath="CodeBIP"
SelectedValue="{Binding Path=CodeGerant}" />
...

Lorsque je lance l'application et que j'ouvre un compte, ma combobox
m'affiche bien la valeur "ClasserSous" correspond à la propriété de ma
classe compte CodeGerant (l'équivalent de CodeBIP dans ma classe Gerants)
mais dans le designer j'ai toujours cette erreur :

Error 1 Value cannot be null.
Parameter name: fileOrServerOrConnection C:UsersgblDocumentsVisual
Studio
2008ProjectsAURISGestionAURISGestion.WPFUIUserControlsucCompte.xaml
165 9 AURISGestion.WPFUI

Je pense que ça a un rapport avec la façon dont j'instancie mon
datacontext mais je ne vois pas où je me trompe...

De plus, dans mon usercontrol, j'intercepte l'événement
this.compte.PropertyChanged += new
PropertyChangedEventHandler(compte_PropertyChanged);
afin de savoir si une propriété a été modifiée et dans ce cas proposer
l'enregistrement à la fermeture. Ca fonctionne pour toutes les propriétés
sauf pour celles bindées à des combobox (j'en ai plusieurs comme l'exemple
ci-dessus et toutes ont la même erreur).
Je ne sais pas si c'est liée ou si c'est un autre problème mais je sèche.

Merci d'avance.
--
Cordialement
Clark
Mon nouveau blog : http://blogs.codes-sources.com/clark




Publicité
Poster une réponse
Anonyme