2010-04-16 13 views
6

Esiste un modo per associare un comando a DataGridHyperlinkColumn? Ho provato questo:C'è un modo per associare un comando a un WPF Toolkit DataGridHyperlinkColumn?

<DataGridHyperlinkColumn Header="Client Name" Binding="{Binding ShortName}"> 
    <DataGridHyperlinkColumn.ElementStyle> 
     <Style TargetType="TextBlock"> 
     <Setter Property="Hyperlink.Command" 
            Value="{Binding DataContext.NavigateToClientCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:ClientsSummaryView}}}"/> 
          <Setter Property="Hyperlink.CommandParameter" Value="{Binding}"/> 
         </Style> 
        </DataGridHyperlinkColumn.ElementStyle> 
    </DataGridHyperlinkColumn> 

In fase di esecuzione, posso vedere che il legame viene valutata correttamente (il getter proprietà per il comando si chiama), ma il comando non viene eseguito quando si fa clic sul collegamento ipertestuale. C'è un modo migliore per farlo?

Grazie,

Daniel

risposta

10

Sei sicuro che il comando è stato associato con il collegamento ipertestuale? Ho provato a configurarlo in un'app campione e il comando non è stato associato al collegamento ipertestuale (se restituisci il valore falso da CanExecute, sarai in grado di determinare rapidamente se è cablato).

Invece, ho creato un DataGridTemplateColumn per raggiungere questo obiettivo:

<DataGridTemplateColumn Header="Client Name"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock> 
       <Hyperlink Command="{Binding DataContext.NavigateToClientCommand, RelativeSource={RelativeSource AncestorType={x:Type local:ClientsSummaryView}}}" 
          CommandParameter="{Binding ShortName}"> 
        <TextBlock Text="{Binding ShortName}" /> 
       </Hyperlink> 
      </TextBlock> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

Questo otterrebbe davvero fastidioso se si dovesse creare più colonne. Dopo aver aperto il toolkit con Reflector, sembra che stia supportando il paradigma TargetName/NavigationUrl per l'utilizzo del collegamento ipertestuale.

Se si dispone di uno scenario in cui si richiede questo tipo di colonna in più punti, suggerirei di estendere lo DataGridHyperlinkColumn e aggiungere una proprietà Comando. È quindi possibile modificare l'elemento restituito da GenerateElement in modo da utilizzare il comando.

+0

Abe: grazie. Speravo di collegarmi a DataGridTemplateColumn, ma, onestamente, non sembra molto peggio di quello che avevo. Grazie ancora! – dks1983

+0

Puoi spiegare come funziona il comando < '? Sembra molto complicato. – Dai

+0

@Dai - questo è un legame 'RelativeSource' a una proprietà' ICommand' sul 'DataContext' di' ClientsSummaryView' dove viene aggiunta questa colonna. Questa domanda ha posto domande su questi tipi di binding e, si spera, ti aiuterà a capirlo meglio: http://stackoverflow.com/questions/84278/how-do-i-use-wpf-bindings-with-relativesource/84317#84317 –

Problemi correlati