我有一个数据网格,我用Comboboxes替换了标题。我通过在wpf中使用下面的代码来完成这部分工作,但我的问题是我不想让第一个列标题的组合框。
我试过这种方式:
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<EventSetter Event="Click" Handler="ColumnHeaderClick" />
<Style.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource ColumnHeaderToComboBoxConverter}">
<Binding Path="ColumnHeader"/>
<Binding Path="DataContext.FirstColumnHeader" ElementName="control" />
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<ComboBox ItemsSource="{Binding DataContext.ArticleAttributes, Source={x:Reference control}}">
<l:Interaction.Triggers>
<l:EventTrigger EventName="SelectionChanged">
<l:InvokeCommandAction Command="{Binding DataContext.ArticleAttributeCommand, Source={x:Reference control}}" CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ComboBox}}, Path=SelectedItem}" />
</l:EventTrigger>
</l:Interaction.Triggers>
</ComboBox>
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.ColumnHeaderStyle>
在多重绑定部分中,我想向转换器发送2个值:
作为我尝试发送当前列标题的第一个值:
<Binding Path="ColumnHeader"/>
每次我发送第一个列标题的特定值时,作为第二个值:
<Binding Path="DataContext.FirstColumnHeader" ElementName="control" />
我想在转换器中比较这两个,如果它们相同则返回false,否则它应该返回true(这意味着将组合框添加到列标题中)。 但 不会将任何信息发送到名为ColumnHeaderToComboBoxConverter的转换器。
任何帮助都将不胜感激。
我也附上了一张图片。
答案 0 :(得分:1)
您可以将第一个列标题样式设置为null,因此此样式不会影响它:
风格:
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<ComboBox ItemsSource="{Binding DataContext.ArticleAttributes, Source={x:Reference control}}"/>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.ColumnHeaderStyle>
列定义:
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding ID}" Header="ID" HeaderStyle="{x:Null}"/>
<DataGridTextColumn Binding="{Binding Name}" Header="Name" />
<DataGridTextColumn Binding="{Binding Age}" Header="Age"/>
</DataGrid.Columns>
<强>的AutoGenerateColumns 强>
如果您的列是由dataGrid生成的,您可以向AutoGeneratingColumn事件添加一个事件处理程序,然后将该列设置为null,这将是第一个调用中的第一列,然后删除处理程序:
添加处理程序:
dataGrid.AutoGeneratingColumn += DataGrid_AutoGeneratingColumn;
处理程序:
private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
e.Column.HeaderStyle = null;
dataGrid.AutoGeneratingColumn -= DataGrid_AutoGeneratingColumn;
}
答案 1 :(得分:0)
你检查过DataTemplateSelector吗?您可以选择其他DataTemplate ...
检查: http://msdn.microsoft.com/en-us/library/ms742521.aspx
此致