2008-11-26 8 views
4

J'essaie de partager une ressource ObjectDataProvider entre mon application principale et un contrôle utilisateur. Je définis l'odp dans un fichier de dictionnaire de ressources distinct qui est inclus dans l'application et le contrôle utilisateur.Partage d'un ObjectDataProvider dans WPF

<ObjectDataProvider x:Key="AsymmetricFrameHolder" 
    ObjectType="{x:Type data:DataFrameAsymmetric}"/> 

Je tente d'accéder à cela dans l'application principale comme suit:

ObjectDataProvider odp = (ObjectDataProvider)Resources["AsymmetricFrameHolder"]; 
return (DataFrameAsymmetric)odp.ObjectInstance; 

et se lient dans le contrôle de l'utilisateur avec:

<Grid Name="grid" Height="Auto" Width="Auto" 
    DataContext="{StaticResource AsymmetricFrameHolder}"> 

Puis:

<TextBox Name="TextBox_Length" Grid.Row="0" Grid.Column="1" 
    Text="{Binding Path=Length }"/> 

Cela crée 2 instances de DataFrameAsymmetric. Un dans l'application principale et un dans le contrôle de l'utilisateur.

Comment puis-je définir le programme afin qu'une seule instance partagée soit créée?

+1

En fait, ce code m'a beaucoup aidé! Je me demandais comment rafraîchir un objet objectdataprovider. Merci! – wonea

Répondre

0

Si vous pouvez prendre un itinéraire différent, ce problème peut être résolu facilement. Convertissez votre classe DataFrameAsymmetric pour Singleton class et à tout endroit où vous voulez utiliser l'instance de celui-ci utiliser comme ci-dessous

<Grid Name="grid" Height="Auto" Width="Auto" DataContext="{Binding Source={x:Static data:DataFrameAsymmetric.Instance}}"> 

A une partie de votre code, vous pourrez accéder à l'instance par

DataFrameAsymmetric.Instance 
+0

Merci pour la réponse, mais un singleton ne fonctionnerait pas ici. Je devrai faire plus d'une instance de la classe dans le programme. –

Questions connexes