내 콤보 상자 요소 중 하나에 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 (모든 유형의 열)에서 위에 첨부 된 속성을 기반으로 필터에 의해 처리됩니다.
어떻게 묶는 DataGridTextColumn을 찾을 수 있습니까? 트리거는 바인딩을 지원하지도 않습니다. 트리거의 속성 속성에서 사용하려고하면 XmlParseException이 슬로우되어 Trigger의 "속성"속성에서 바인딩을 설정할 수 없다는 메시지가 나타납니다. – Jatin
헤더를 어떻게 변경하고 있습니까? 그렇지 않으면 트리거로 응답해야합니다. 내가 암시하고/인도 할 수있는 것은 머리글에 ComboBox와 같은 속성에서 Bind/Trigger를 할 수 있다는 것입니다. –
당신을 오도하는 것에 대해 유감입니다. 예제 코드는 단지 예입니다. 실제로 트리거를 작성해야하는 DataGridTextColumn에는 사용자 지정 연결된 속성이 있습니다. 트리거가 ComboBox를 보이지 않게 만들므로 Combobox 스타일로 트리거를 정의하는 것이 논리적 인 것처럼 보입니다. – Jatin