2012-04-10 73 views
0

我想附加一個datatrigger在我的一個combobox元素上。觸發器應該讀取DataGridTextColumn(組合框的祖先)的附加屬性並根據該屬性做出決定。現在問題是DataGridTextColumn不是Visual Tree的一部分,所以我無法通過RelativeSource祖先得到它。這裏是示例代碼。DataGridTextColumn DataTrigger

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

任何一個可能提出一些替代

編輯:

@denis 我真的不明白您的解決方案,所以讓我詳細解釋。我正在開發一個適用於所有需要過濾功能的DataGrid的通用過濾器。 DataGrid定義將通過在DataGrid上指定自定義附加屬性「IsFilterable」來指定是否需要過濾。通過在DataGridColumn上指定「FilterDisplayType」,單個DataGridColum將指定他們想要的過濾器類型(組合框或文本框)。 DataGrid除了上述以外不會知道任何內容。所有的功能都將基於DataGrid和DataGridColumn(所有類型的列)上的附加屬性由Filter過濾。

+0

如何找到封閉的DataGridTextColumn。觸發器甚至不支持綁定,如果我嘗試在Trigger的Property屬性上使用它,則會拋出XmlParseException,表示無法在Trigger的「Property」屬性上設置綁定。 – Jatin 2012-04-10 12:50:31

+0

你是怎麼改變標題的,顯然你是這樣做的,否則你將不得不用觸發器來回應它?我所暗示/通向的是,你可能可以在具有ComboBox相同屬性綁定/觸發作爲頁眉 – 2012-04-10 16:25:51

+0

我爲有誤導對不起你。示例代碼就是例子。實際上,DataGridTextColumn上有一個自定義的附加屬性,我必須編寫觸發器。由於觸發器將會使組合框無形的,它似乎是合乎邏輯定義組合框的樣式觸發。 – Jatin 2012-04-10 16:30:10

回答

0

我在我的評論觀點是,你可以觸發你綁定到一個屬性,不是標題。因爲如果你的標題變化做出反應,比你要觸發頭標,這是很好的,但是這可以是與您的模型完全相同的屬性,只能在不同的位置進行響應。

而且你不能把一個組合框在DataGridTextColumn, 所以你必須要麼:

<DataGridComboBoxColumn ItemsSource="{Binding CategoryNameItems}" 
         DisplayMemberPath="{Binding CategoryName}" 
         Visibility="{Binding MyVisibilityProperty, Converter={StaticResource BoolToVisibility}}" /> 

這將隱藏的整列或只是隱藏組合框把它放在CellTemplate:

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

請看我編輯的問題。感謝您查看我的問題。 – Jatin 2012-04-11 06:18:06