DataGrid WPF中的HeaderTemplate

时间:2011-03-09 16:23:43

标签: wpf wpf-controls binding

我需要在我的datagrid标题中为其中一列提供一种日期选择器。当用户从此标题日期选择器中选择日期时,系统应将此日期绑定到具有日期的所有列单元格 有办法吗?

2 个答案:

答案 0 :(得分:7)

最好的方法是将标头的dataTemplate设置为包含DatePicker的自定义模板,该DatePicker的Date绑定到DataGrid的DataContext属性之一,然后将此特定列中的单元格绑定到同一属性。

类似的东西:

    <DataGrid>
        <DataGridTextColumn Binding="{Binding DataContext.myDate, RelativeSource={RelativeSource AncestorType=DataGrid}, Mode=OneWay}" >
            <DataGridTextColumn.HeaderStyle>
                <Style TargetType="{x:Type DataGridColumnHeader}">
                    <Style.Setters>
                        <Setter Property="ContentTemplate">
                            <Setter.Value>
                                <DataTemplate>
                                    <DatePicker SelectedDate={Binding myDate, Mode=TwoWay} />
                                </DataTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style.Setters>
                </Style>
            </DataGridTextColumn.HeaderStyle>
        </DataGridTextColumn>
    </DataGrid>

免责声明:我没有尝试这个,我不确定{Binding DataContext.myDate, RelativeSource={RelativeSource AncestorType=DataGrid}的事情。您可能会做一些调整,但总的来说,这应该为您提供如何继续的开始

答案 1 :(得分:2)

您可以修改DataGrid的列标题以包含DateTimePicker,然后将更改事件添加到DateTimePicker,以便在数据更改时更新该列中的所有数据。

<DataGridTextColumn Binding="{Binding Path=MyDate}">
    <DataGridTextColumn.Header>
        <!-- Add Header Here w/ DateTimePicker -->
    </DataGridTextColumn.Header>
</DataGridTextColumn>