2013-03-04 12 views
5

Sto tentando di inserire un collegamento ipertestuale all'interno di uno DataGrid e di trovare un metodo per implementare il comportamento RequestNavigate utilizzando il modello MVVM.Modello di cella con utilizzo del collegamento ipertestuale nel pattern MVVM

Ho provato un sacco di soluzioni fino ad ora, ma nessuno di loro funziona. Potresti aiutarmi per favore?

Questo è il mio codice XAML:

<dgWPFCtrl:ExtDataGridTemplateColumn Header="Link to XXX" Width="*"> 
        <dgWPFCtrl:ExtDataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock > 
           <Hyperlink NavigateUri="{Binding Path=ID_HTTP_LINK}" 
              > 
            <TextBlock Text="{Binding Path=ID_HTTP_LINK}"/> 
            <i:Interaction.Triggers> 
             <i:EventTrigger EventName="RequestNavigate"> 
              <WPFCtrl:EventToCommand 
               PassEventArgsToCommand="True" 
               Command="{Binding Path=OpenLinkCommand}" /> 
             </i:EventTrigger> 
            </i:Interaction.Triggers> 
           </Hyperlink> 
          </TextBlock> 
         </DataTemplate> 
        </dgWPFCtrl:ExtDataGridTemplateColumn.CellTemplate> 
       </dgWPFCtrl:ExtDataGridTemplateColumn> 

e seguendo la relativa ICommand sviluppo:

//Command for open link 
RelayCommand _openLinkCommand; 
public ICommand OpenLinkCommand 
{ 
    get 
    { 
     if (_openLinkCommand == null) 
      _openLinkCommand = new RelayCommand(param => 
      { 
       //Command Body ... 
      }); 
     return _openLinkCommand; 
    } 
} 

Dove sbaglio? Inaspettatamente, lo ICommand non viene mai chiamato!

Ho provato a utilizzare anche altri tipi di eventi (ad esempio MouseEnter), ma non è cambiato nulla!

Grazie in anticipo per i vostri contributi,

Deby

+0

È l'OpenLinkCommand situato nel l'oggetto rappresentato dal DataRow, o è il comando nel tuo ViewModel? –

+0

In realtà è nel mio ViewModel ... – Deby

risposta

10

DataContext per il collegamento ipertestuale è quella dell'oggetto rappresentato dal DataGridRow, non il vostro ViewModel. Dovrai quindi utilizzare un metodo di associazione per portarti a quel ViewModel (RelativeSource AncestorType o ElementName).

ElementName (supponendo che il DataGrid si chiama 'myDataGrid')

Command="{Binding ElementName=myDataGrid, Path=DataContext.OpenLinkCommand}" 

RelativeSource

Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.OpenLinkCommand}" 
+0

Problema risolto! Grazie mille ZF !! : D – Deby

+0

amico, e sto scavando sul web perché i miei hyperlink non funzionano. Anche io ho applicato lo stesso metodo come 1 scorrimento verso il basso, non riuscivo a vederlo. – Javidan

Problemi correlati