WPF - привязка свойства Content пользовательского шаблона DataGridTextColumn к свойству родителя

Во-первых, я возвращаюсь в WPF после нескольких лет его ухода, я немного знал об этом раньше и разрабатываю несколько окон, но теперь я за пределами ржавого. Я пытаюсь создать DataGrid с заголовками фильтров, теперь я понимаю, что для этого нет готового элемента управления и его необходимо создать, и я начал использовать шаблон.

Мой шаблон состоит из элемента управления Label слева, который содержит заголовок заголовка, и элемента управления DatePick справа, который я буду использовать как часть моего процесса фильтрации. Я пытаюсь получить свойство Label.Content внутри моего шаблона, чтобы выбрать значение свойства DataGridTextColumn.Header родительского шаблона.

Я пробовал RelativeSource, TemplatedParent и все остальное, что я есть, я также не смог найти ни одного поста, описывающего мою проблему или решение. Любая помощь будет принята с благодарностью. Благодарю.

Мой код

<UserControl x:Class="CustomControls.ReportsListingControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="100" d:DesignWidth="600">
<UserControl.Resources>
    <Style x:Key="ColumnHeaderStyle1" TargetType="{x:Type DataGridColumnHeader}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="DataGridColumnHeader">
                    <Grid Width="200" Height="35">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>
                        <Label Grid.Column="0" 
                               HorizontalAlignment="Left" 
                               VerticalAlignment="Center" 
                               Width="50"
                               Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridTextColumn}}, Path=Header}" />
                        <DatePicker Grid.Column="1" 
                                    HorizontalAlignment="Right" 
                                    VerticalAlignment="Center" 
                                    Width="30" 
                                    BorderThickness="0" Text="" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</UserControl.Resources>
<Grid>
    <DataGrid Name="DataGrid1" >
        <DataGrid.Columns>
            <DataGridTextColumn  HeaderStyle="{StaticResource ColumnHeaderStyle1}" Header="The Text I want displayed in my template label" />
        </DataGrid.Columns>
    </DataGrid>
</Grid>

1 ответ

Решение

Привязать к DataContext сам:

<Label ... Content="{Binding}" />

DataContext из DataGridColumnHeader это Header сам объект, то есть string в твоем случае.

Другие вопросы по тегам