2010-04-16 5 views
6

Command를 DataGridHyperlinkColumn과 연결할 수있는 방법이 있습니까?Command를 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> 

런타임에서, 나는 제대로 (명령의 속성 게터가 호출) 평가되고 바인딩을 볼 수 있지만 하이퍼 링크를 클릭하면 명령이 실행되지 않은 : 나는 이것을 시도했습니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?

감사합니다,

다니엘

답변

10

명령이 하이퍼 링크와 연관되는 확실한가요? 이 예제를 샘플 앱에서 설정하려고 시도했지만 명령이 하이퍼 링크와 연결되지 않았습니다. (CanExecute에서 false를 반환하면 빠르게 유선인지 여부를 확인할 수 있습니다.)

대신,이 작업을 수행하기 위해 DataGridTemplateColumn을 생성 : 여러 열을 생성해야한다면

<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> 

이 정말 짜증나는 얻을 것입니다. Reflector가 포함 된 Toolkit을 열면 하이퍼 링크 사용에 대한 TargetName/NavigationUrl 패러다임을 지원하는 것으로 보입니다.

많은 곳에서이 유형의 열이 필요할 시나리오가 있다면 DataGridHyperlinkColumn을 확장하고 Command 속성을 추가하는 것이 좋습니다. 그런 다음 GenerateElement에서 반환 된 요소를 수정하여 명령을 사용하도록 할 수 있습니다.

+0

아베 : 감사합니다. DataGridTemplateColumn을 바로 가기로 바라고 있었지만, 솔직히, 내가 가지고있는 것보다 훨씬 안좋아 보입니다. 다시 한 번 감사드립니다! – dks1983

+0

''어떻게 작동하는지 설명 할 수 있습니까? 그것은 매우 복잡해 보입니다. – Dai

+0

@Dai -이 열이 추가 된'ClientsSummaryView'의'DataContext'에있는'ICommand' 속성에 대한'RelativeSource' 바인딩입니다. 이 질문은 이러한 유형의 바인딩에 대해 질문했으며 잘하면 이해하는 데 도움이됩니다. http://stackoverflow.com/questions/84278/how-do-i-use-wpf-bindings-with-relativesource/84317#84317 –

관련 문제