Шаблон заголовка в DataGrid WPF - PullRequest
1 голос
/ 09 марта 2011

Мне нужно иметь своего рода указатель даты в моем заголовке таблицы данных для одного из столбцов.Когда пользователь выбирает дату из этого заголовка даты, система должна привязать эту дату ко всем ячейкам столбца с датой.Есть ли способ сделать это?

Ответы [ 2 ]

7 голосов
/ 09 марта 2011

лучший способ - установить для dataTemplate заголовка собственный шаблон, содержащий DatePicker, Date которого привязан к одному из свойств DataContext DataGrid, а затем связать ячейки в этом конкретном столбце с тем же свойством.

как то так:

    <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}. Возможно, вам придется внести некоторые коррективы, но в целом это должно дать вам начало того, как действовать

2 голосов
/ 09 марта 2011

Можно изменить заголовок столбца для DataGrid, включив в него DateTimePicker, а затем добавить событие изменения в DateTimePicker, который обновляет все данные в этом столбце при изменении данных.

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