2012-05-30 13 views
7

Ho un controllo e all'interno di tale controllo ho una risorsa con un tempalte dati:WPF utilizzando MVVM: DataBinding con RelativeSource

<DataTemplate DataType="{x:Type local:FlowModel}"> 
    <Image Source="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type vm:MainViewModel}}, Path=MainViewModel.ImagePath}"/> 
    </DataTemplate> 

xmlns:vm="clr-namespace:CortexMonitoringTool.ViewModel" 

ho VM impostato alla mia cartella ViewModel, io sono l'attuazione MVVM. Non riesco a far funzionare il mio legame e non sono sicuro perché no.

Alcuni possono dirmi se il mio legame relativo è corretto, se può effettivamente vedere la mia proprietà 'ImagePath' nella mia classe MainViewModel?

public String ImagePath 
    { 
     get 
     { 
      return _imagePath; 
     } 
     set 
     { 
      if (_imagePath == value) 
      { 
       return; 
      } 
      _imagePath = value; 
      RaisePropertyChanged("ImagePath"); 
     } 
    } 

Grazie.

+1

consiglio utilizzando [Snoop] (http://snoopwpf.codeplex.com/) e [consentendo WPF informazioni di traccia] (http://msdn.microsoft.com/en-us/library/dd409960. aspx). Entrambi ti mostrano quali attacchi stanno fallendo. Sto anche imparando WPF al fianco di MVVM e sto trovando queste due fonti di informazioni assolutamente inestimabili. –

risposta

4

La visualizzazione del modello non fa parte dell'albero di visualizzazione. quindi il tipo di antenato trovato non funzionerà lì. e se trovi il genitore di radice che sta avendo il datacontext allora puoi usare la sua proprietà per associare con like.

<Image Source={...... Path=DataContext.MyProperty}"/> 
7

Ciao, sono riuscito a farlo funzionare.

<DataTemplate DataType="{x:Type local:FlowModel}"> 
    <Image Source="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.ImagePath}"/> 
    </DataTemplate> 

ho cambiato AncestorTypeto be'Window', che era tutto pronto legata alla mia MainViewModel e poi utilizzato 'DataContext'. nel mio percorso per poter vedere la mia proprietà.

Spero che questo aiuti qualcun altro !!

+0

Molto utile anche anni dopo ... funziona bene per il comando del sistema di navigazione su un container View, senza utilizzare soluzioni o toolkit eccessivamente ingegnerizzati. – ZexDC