2013-03-04 23 views
5

Tring do wstawienia hiperłącza w obrębie DataGrid i znajdowania metody w celu implementacji zachowania RequestNavigate przy użyciu wzorca MVVM.Szablon komórki z wykorzystaniem hiperłącza w sygnaturze MVVM

Do tej pory próbowałem wielu rozwiązań, ale żaden z nich nie działa. Proszę, mógłbyś mi pomóc?

To jest mój kod 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> 

i po względną ICommand rozwój:

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

Jeżeli się mylę? Nieoczekiwanie, ICommand nigdy nie jest wywoływana!

Próbowałem użyć także innego rodzaju zdarzenia (np. MouseEnter), ale nic się nie zmieniło!

Dzięki z góry za składki,

Dęby

+0

Czy OpenLinkCommand usytuowany w obiekcie są reprezentowane przez DataRow, czy polecenie w swoim ViewModelu? –

+0

Właściwie jest to w moim ViewModel ... – Deby

Odpowiedz

10

hiperłącze za DataContext jest to, że od przedmiotu przedstawionego przez DataGridRow, a nie swojej ViewModel. Więc będziesz musiał użyć metody wiązania, aby dostać się do tego ViewModel (albo RelativeSource AncestorType, albo ElementName).

ElementName (zakładając swoją DataGrid jest nazwany 'myDataGrid')

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

RelativeSource

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

Problem rozwiązany! Dziękuję bardzo ZF !! : D – Deby

+0

stary, a ja przekopuję internet, dlaczego moje hiperlinki nie działają. Nawet ja zastosowałem tę samą metodę, jak 1 przewijanie w dół, nie mogłem jej zobaczyć. – Javidan