2014-05-12 5 views
1

나는 현재 다음 DataGridHyperLinkColumn 정의 내 데이터 그리드에서 하이퍼 링크를 표시하고 있습니다 :WPF의 DataGridColumn 조건 제어

<DataGridHyperlinkColumn Header="Item" Binding="{Binding Item, Mode=OneWay}"> 
    <DataGridHyperlinkColumn.ElementStyle> 
     <Style> 
     <EventSetter Event="Hyperlink.Click" Handler="ButtonItemInfo_OnClick"/> 
     </Style> 
    </DataGridHyperlinkColumn.ElementStyle> 
    </DataGridHyperlinkColumn> 

내가 조건부 하이퍼 링크 또는 라벨 (또는 TextBlock을)를 표시하려면이 옵션을 변경하고 싶습니다. 따라서 바인딩 된 값이 "SH"이면 레이블을 표시하려고합니다. 그렇지 않으면 하이퍼 링크를 원합니다.

어떻게하면됩니까?

답변

1

하이퍼 링크를 명령에 바인딩하고 조건부로 거짓을 CanExecute에 반환합니다. 사용할 수없는 상태의 하이퍼 링크 스타일을 지정할 수 있습니다.

<DataGrid ItemsSource="{Binding Items}"> 
    <DataGrid.Columns> 
    <DataGridTemplateColumn Header="Item"> 
     <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock> 
      <Hyperlink Command="{Binding DataContext.Navigate, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" 
         CommandParameter="{Binding}">     
       <TextBlock Text="{Binding}" /> 
      </Hyperlink> 
     </TextBlock> 
     </DataTemplate> 
     </DataGridTemplateColumn.CellTemplate> 
    </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 

그리고 뷰 모델

:

public ObservableCollection<string> Items 
    { 
     get; 
     set; 
    } 

    public ICommand Navigate 
    { 
     get 
     { 
      return new RelayCommand(
       (param) => DoNavigate(param as string), // execute 
       (param) =>        // can execute 
       { 
        var link = param as string; 
        return link != "SH"; 
       }); 
     } 
    } 

당신이 정말로 당신이 열 셀 스타일에 DataTrigger를 사용할 수있는 몇 가지 행에 대한 텍스트 상자가 필요합니다.

<DataGrid ItemsSource="{Binding Items}"> 
    <DataGrid.Columns> 
    <DataGridTemplateColumn Header="Item"> 
     <DataGridTemplateColumn.CellStyle> 
     <Style TargetType="DataGridCell"> 
      <Setter Property="Template"> 
      <Setter.Value> 
      <!-- Template for normal rows --> 
       <ControlTemplate> 
       <TextBlock> 
        <Hyperlink Command="{Binding DataContext.Navigate, 
           RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" 
          CommandParameter="{Binding}">     
        <TextBlock Text="{Binding}" /> 
        </Hyperlink> 
       </TextBlock> 
       </ControlTemplate> 
      </Setter.Value> 
      </Setter> 
      <Style.Triggers> 
      <DataTrigger Binding="{Binding}" Value="SH"> 
       <Setter Property="Template"> 
       <Setter.Value> 
        <!-- Template for SH rows --> 
        <ControlTemplate> 
        <TextBlock Text="{Binding}" /> 
        </ControlTemplate> 
       </Setter.Value> 
       </Setter> 
      </DataTrigger> 
      </Style.Triggers> 
     </Style> 
     </DataGridTemplateColumn.CellStyle> 

    </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid>