J'ai un ListView WPF, qui a une grille en tant que ItemsPanelTemplate. Je montre mes articles dans la colonne et la rangée correctes basées sur une propriété de l'article. Mais je voudrais mettre quelques contrôles dans les cellules vides de ma grille.Ajouter des contrôles pour vider des cellules dans une grille qui est le ItemsPanelTemplate pour un ListView
Ceci est une version simplifiée de mon code et XAML:
des ressources:
<ItemsPanelTemplate x:Key="TheTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
</Grid>
</ItemsPanelTemplate>
Dans le XAML:
<Controls:CustomListView ItemsSource="{Binding TheCollection}"
ItemsPanel="{DynamicResource TheTemplate}">
</Controls:CustomListView>
Enfin, dans mon CustomListView:
protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
{
base.PrepareContainerForItemOverride(element, item);
var viewModel = item as DomainObject;
if (viewModel != null)
{
element.SetValue(Grid.ColumnProperty, 1); //here I work with a converter, but this just simplifies it for StackOverflow
element.SetValue(Grid.RowProperty, 1);
}
}
NOTE: Je sais que je suis en train de lancer un DomainObject, mais s'il vous plait, faites attention.
Ce que cela va me donner, est une grille avec des éléments dans la ligne et la colonne correctes. Mais que faire si je veux afficher quelque chose dans les cellules vides, par exemple un texte comme 'null'?
Je ne peux pas simplement l'ajouter à mon modèle, car cela bloque l'application, en disant que ItemsControl créera les contrôles nécessaires. J'ai essayé d'accéder à la grille/au modèle en code-behind, mais je n'arrive pas à trouver comment. Peut-être que je ne devrais pas utiliser le ListView? Peut-être qu'il existe d'autres/meilleures solutions?