2011-11-16 2 views
0

J'ai une application WPF avec MVVM, elle a un Ap.XAML qui ressemble à ceci.Comment lier un TextBlock à une ressource ObjectDataProvider définie dans app.xaml?

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Assets/StyleDictionary.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
     <ObjectDataProvider x:Key="SAG_POK" ObjectType="{x:Type or:SAG_POK}" /> 
    </ResourceDictionary>   
</Application.Resources> 

Maintenant, sur la MainWindow.xaml je veux lier à la SAG_POK ObjectDataProvider dans Ap.xaml.

<StackPanel 
    DataContext="{Binding Source={StaticResource SAG_POK}}"> 
    <TextBlock Name="ValgtSag" Text="{Binding ToStringProperty}"/> 
</StackPanel> 

Mon problème est que dans un de mes viewmodels, j'instancier le SAG_POK ObjectDataProvider en App.xaml avec une instance de SAG_POK.

App.Current.Resources["SAG_POK"] = SagSelecteditem; 

Mais je ne peux pas savoir où mettre mes OnNotifyPropertyChanged (« SAG_POK ») J'ai essayé différents scénarios, mais aucun d'entre eux ne semble fonctionner.

Toute personne qui a déjà essayé cela avant, s'il vous plaît laissez-moi savoir des conseils, merci d'avance.

+0

Je ne comprends pas: Pourquoi utilisez-vous un ObjetcDataProvider lorsque vous avez déjà ViewModels? Pourquoi ne pas lier directement la View au ViewModel? – SvenG

+0

Parce que Objectdataprovider est utilisé plusieurs endroits dans l'application et parce que le viewmodel est utilisé sur la page, pas par la fenêtre. – ThomasE

+0

Vous ne "définissez" pas une ressource comme celle-là. Il est instancié lorsqu'il est référencé et cette instance est réutilisée à chaque fois. La façon dont vous essayez d'utiliser l'ODP est bizarre. Pourquoi ne pas simplement ajouter votre instance SAG_POK en tant que ressource? Remplacez l'ODP par ce qui suit: '' – Will

Répondre

0

vous pouvez le faire

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Assets/StyleDictionary.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
     <!--<ObjectDataProvider x:Key="SAG_POK" ObjectType="{x:Type or:SAG_POK}" />--> 
     <local:MainViewModel x:Key="SAG_POK" /> 
    </ResourceDictionary>   
</Application.Resources> 


<StackPanel DataContext="{Binding Source={StaticResource SAG_POK}}"> 
    <TextBlock Name="ValgtSag" Text="{Binding ToStringProperty}"/> 
</StackPanel> 

App.Current.Resources["SAG_POK"].SelectedItem = SagSelectedItem; 

MainViewModel est le modèle yout de vue principale :-) dans l'application trou

espérons que cette aide

+0

Merci, cela a fonctionné parfaitement :-) – ThomasE

Questions connexes