il doit y avoir plusieurs manières de faire
en ce moment je suis sur le contentpresenter, qui comme tous les controles a une propriété content
et donc dans ce content tu mets n'importe quoi, de préférence une instance de classe non graphique, et tu rajoutes un DataTemplate qui explique comment afficher cette instance
si possible en mettant du MVVM mais pas forcément si c'est peu de choses et un petit projet
dans le principe si tu as une classes menumachin qui une propriété titre, et une propriété trucs de type List<truc> sachant que truc a des propriétés (nom, prenom ...) et une méthode :
<contentpresenter Content="{Binding menuAffiché}"/>
donc sur le clic d'un bouton tu change la propriété menuaffiché, et ca change l'interface automatiquement (si possible sans utiliser d'event ^^)
et des datatemplates
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <DataTemplate DateType ou x:key MenuMachin>
<Grid>
<!-- define rows et cols-->
<TextBlock Text="{Binding Titre}"/>
<ItemsControl ItemsSource="{Binding Trucs}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Nom}"/>
<TextBlock Text="{Binding Prenom}"/>
<Button Text="Supprimer" Command="{Binding DeleteCommand}"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</DataTemplate> |
voilà un exemple, il faut donc voir les bindings, les templates, DataContext, INotifyPropertyChanged, la classe RelayCommand etc...
et en wpf ObservableCollection est mieux que List, modifier la collection modifie automatiquement l'interface
je sais plus si c'est via datatype, x:datatype ou x:key mais y a moyen de dire que ce datatemplate est à utiliser automatiquement quand un control a une instance d'un certain type
ce qui permet de mettre les datatemplates dans app.xaml (ou dans des dictionnaires de ressources différents mergés)
Partager