2012-04-10 5 views
0

내 콤보 상자 요소 중 하나에 datatrigger를 연결하려고합니다. 트리거는 DataGridTextColumn (콤보 상자의 조상)의 연결된 속성을 읽고 그에 따라 결정을 내려야합니다. 이제 문제는 DataGridTextColumn이 Visual Tree의 일부가 아니므로 RelativeSource Ancestor에서 DataGridTextColumn을 가져올 수 없다는 것입니다. 다음은 샘플 코드입니다.DataGridTextColumn의 DataTrigger

가 정말 솔루션을 이해하지를 @denis, 그래서 내가 자세히 설명하자

<ComboBox Name="cmbFilter" DisplayMemberPath="CategoryName"> 
    <ComboBox.Style> 
     <Style> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridTextColumn}}, 
          Path=Header}" 
          Value="Id"> 
        <Setter Property="Control.Visibility" Value="Collapsed"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ComboBox.Style> 
</ComboBox> 

어느 하나는 아마도 어떤 대안

편집을 제안한다. 필터링 기능이 필요한 모든 DataGrid에 적용되는 범용 필터를 개발 중입니다. DataGrid 정의는 DataGrid에서 사용자 지정 연결 속성 "IsFilterable"을 지정하여 필터링을 원하는지 여부를 지정합니다. 개별 DataGridColum은 DataGridColumn에서 "FilterDisplayType"을 지정하여 원하는 종류의 필터 (콤보 상자 또는 텍스트 상자)를 지정합니다. DataGrid는 위의 것 외에는 아무것도 알 수 없습니다. 모든 기능은 DataGrid 및 DataGridColumn (모든 유형의 열)에서 위에 첨부 된 속성을 기반으로 필터에 의해 처리됩니다.

+0

어떻게 묶는 DataGridTextColumn을 찾을 수 있습니까? 트리거는 바인딩을 지원하지도 않습니다. 트리거의 속성 속성에서 사용하려고하면 XmlParseException이 슬로우되어 Trigger의 "속성"속성에서 바인딩을 설정할 수 없다는 메시지가 나타납니다. – Jatin

+0

헤더를 어떻게 변경하고 있습니까? 그렇지 않으면 트리거로 응답해야합니다. 내가 암시하고/인도 할 수있는 것은 머리글에 ComboBox와 같은 속성에서 Bind/Trigger를 할 수 있다는 것입니다. –

+0

당신을 오도하는 것에 대해 유감입니다. 예제 코드는 단지 예입니다. 실제로 트리거를 작성해야하는 DataGridTextColumn에는 사용자 지정 연결된 속성이 있습니다. 트리거가 ComboBox를 보이지 않게 만들므로 Combobox 스타일로 트리거를 정의하는 것이 논리적 인 것처럼 보입니다. – Jatin

답변

0

필자의 주장에 따르면, 헤더에 바인딩하지 않고 바인딩하는 속성에서 트리거 할 수 있습니다. 헤더 변경에 응답하는 경우 헤더를 트리거하는 것보다 좋기 때문에, 그러나 그것은 당신이 응답 한 당신의 모델에 정확히 같은 Property 일 수 있습니다.

또한 당신이 그래서 당신이 가진 것, DataGridTextColumn에서 콤보 상자를 넣을 수 없습니다에 다음 중 하나를

전체 열을 숨기거나 콤보가 CellTemplate에 넣어 만 숨길
<DataGridComboBoxColumn ItemsSource="{Binding CategoryNameItems}" 
         DisplayMemberPath="{Binding CategoryName}" 
         Visibility="{Binding MyVisibilityProperty, Converter={StaticResource BoolToVisibility}}" /> 

:

<DataGridTemplateColumn> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <ComboBox ItemsSource="{Binding CategoryNameItems}" DisplayMemberPath="{Binding CategoryName}" 
           Visibility="{Binding MyVisibilityProperty, Converter={StaticResource BoolToVisibility}}" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
+0

내 편집 된 질문을 참조하십시오. 내 문제를 조사해 주셔서 감사합니다. – Jatin

관련 문제