2012-04-10 39 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