/ / Utiliser HeaderedItemsControl dans Datagridcell ne montrant pas le contenu - wpf, xaml, datagrid

Utilisez HeaderedItemsControl dans Datagridcell sans afficher le contenu - wpf, xaml, datagrid

Je veux disply un HeaderedItemsControldans un DataGridTemplateColumn. Toutefois, le code suivant affiche uniquement l'en-tête, mais pas le contenu. Où est-ce que je me suis trompé?

<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<HeaderedItemsControl ItemsSource="{Binding Days[0].Employee}">
<HeaderedItemsControl.Template>
<ControlTemplate TargetType="HeaderedItemsControl">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="30"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="Employee"/>
<Button Grid.Column="1"></Button>
</Grid>
</ControlTemplate>
</HeaderedItemsControl.Template>
<HeaderedItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"></StackPanel>
</ItemsPanelTemplate>
</HeaderedItemsControl.ItemsPanel>
<HeaderedItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</HeaderedItemsControl.ItemTemplate>
</HeaderedItemsControl>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>

Réponses:

1 pour la réponse № 1

Vous avez oublié d'inclure ItemsPresenter dans votre modèle. Donc, votre contrôle n'a qu'un en-tête, rien d'autre. Le simple fait de le rajouter fera l'affaire:

<ControlTemplate TargetType="HeaderedItemsControl">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="30" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="22" />
<RowDefinition />
</Grid.RowDefinitions>

<TextBlock Grid.Column="0" Text="Employee" />
<Button Grid.Column="1" />

<ItemsPresenter Grid.Row="1" Grid.ColumnSpan="2" />
</Grid>
</ControlTemplate>

Aussi, êtes-vous sûr Days[0].Employee est une collection? Cela semble étrange à coup sûr.


En prime, vous ne devez pas vraiment utiliser HeaderedItemsTemplate. Votre modèle est assez simple pour le créer avec les contrôles de base:

<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="24" />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="30" />
</Grid.ColumnDefinitions>

<TextBlock Text="Employee" />
<Button Grid.Column="1" />

<ItemsControl ItemsSource="{Binding Days[0].Employee}" Grid.Row="1" Grid.ColumnSpan="2">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>