DataGrid WPF 中的标题模板

发布于 2024-10-20 23:10:08 字数 87 浏览 2 评论 0原文

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

I need to have a kind of a datepicker in my datagrid header for one of the columns. When the user selects the date from this header datepicker, the system should bind this date to all the column cells with the date.
Is there a way to do it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

眼趣 2024-10-27 23:10:08

最好的方法是将标题的 dataTemplate 设置为包含 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} 的事情。您可能需要进行一些调整,但总的来说,这应该让您开始了解如何继续

the best way is to set the header's dataTemplate to a custom template containing a DatePicker whose Date is bound to one of the DataGrid's DataContext's properties, then bind the cells in this specific column to the same property.

something like this:

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

Disclaimer: I did not try this and am not sure about the {Binding DataContext.myDate, RelativeSource={RelativeSource AncestorType=DataGrid} thing. You would probably have do to some adjustments, but overall, this should give you a start on how to proceed

栀梦 2024-10-27 23:10:08

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

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

You can modify the column's header for the DataGrid to include a DateTimePicker, then add a change event to the DateTimePicker which updates all the data in that column when the data changes.

<DataGridTextColumn Binding="{Binding Path=MyDate}">
    <DataGridTextColumn.Header>
        <!-- Add Header Here w/ DateTimePicker -->
    </DataGridTextColumn.Header>
</DataGridTextColumn>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文