Bonjour
Bonjour Whismeril,
Merci pour ta réponse. Je te confirme que je suis bien sous VB.NET WPF. et non pas Winforms.
Ce n'est peut être pas fait dans les régles de l'art en effet. Concernant la différence entre les classes et structures je suis d'accord avec toi. Mais que je sois en classe ou structure çà ne régle pas mon probléme.
Pour OPT1 et Opt2 j'ai un donnée composée et je n'arrive pas à afficher la valeur NOM dans ma data grid.
Concernant la notion de Binding j'ai un peu de mal avec çà. Entre le datacontext, le ItemSource et j'en passe, je ne m'y retrouve pas.
Appeler tes "window" formQuelqueChose et ne pas préciser que tu es en WPF prête à confusion.
Le binding en wpf est beaucoup plus simple à écrire dans le xaml.
Je tache de te faire un exemple dans la soirée
Tu ne m'as pas répondu sur le pourquoi d'une structure plutôt qu'une classe
Tu peux lire ceci en attendant
https://codes-sources.commentcamarche.net/faq/11277-apercu-du-binding-en-wpf
La raison d'une structure ? Je n'en ai pas. Je l'ai fait comme çà. Mais pourquoi pas passer en classe oui
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionJ'ai eu l'habitude de programmer sous Winforms et j'ai des mauvaises habitudes qui me restent quand je passe à WPF.
L'extrait de programme que j'ai donné était d'abord en Winforms que j'ai converti tant bien que mal en WPF pour pouvoir profiter de certaines capacités graphiques.. C'est pour çà que j'appelle mes fenêtres FORM...
Premier exemple, sans vue
Le code behind de la window
Public Partial Class WdwTestBoumBoum Inherits Window Public Sub New(ByVal LesFilms As List(Of StructPropertyVhs)) Me.InitializeComponent() DataContext = LesFilms End Sub End Class
Pour le Xaml, je ne vais pas m'étendre sur le datacontext "transmis" dans l'arborescence des contrôles, je l'ai déjà décrit dans le tuto que je t'ai mis en lien dans le message 5.
Tu verras en commentaire la description de la construction des 3 colonnes d'exemple
<Window x:Class="Test_WPF.WdwTestBoumBoum" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:Test_WPF" mc:Ignorable="d" Title="WdwTestBoumBoum" Height="450" Width="800" DataContext="{Binding}"> <Grid DataContext="{Binding .}"> <ListView DataContext="{Binding .}" ItemsSource="{Binding .}"> <ListView.View> <GridView> <!--Une colonne dont le titre est Option 1, la valeur de Opt1.Nom est affichée dans un textblock--> <GridViewColumn Header="Option 1"> <GridViewColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding Opt1.Nom}"/> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> <!--Une colonne dont le titre est Option 2, la valeur de Opt3 est affichée dans un textbox--> <GridViewColumn Header="Option 3"> <GridViewColumn.CellTemplate> <DataTemplate> <TextBox Text="{Binding Opt3}"/> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> <!--Une colonne dont le titre est Option 5, la valeur de Opt5 est affichée dans un checkbox--> <GridViewColumn Header="Option 5"> <GridViewColumn.CellTemplate> <DataTemplate> <CheckBox IsChecked="{Binding Opt5}"/> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> </GridView> </ListView.View> </ListView> </Grid> </Window>
Et enfin, le code behind de la fenêtre appelante
Dim films As List(Of StructPropertyVhs) = New List(Of StructPropertyVhs) From { New StructPropertyVhs With { .Opt1 = New TypParam With { .Id = 1, .Nom = "Option_Id_1" }, .Opt3 = 11, .Opt5 = True }, New StructPropertyVhs With { .Opt1 = New TypParam With { .Id = 2, .Nom = "Option_Id_2" }, .Opt3 = 22, .Opt5 = False }, New StructPropertyVhs With { .Opt1 = New TypParam With { .Id = 3, .Nom = "Option_Id_3" }, .Opt3 = 33, .Opt5 = True } } Dim test As WdwTestBoumBoum = New WdwTestBoumBoum(films) test.Show()
Ce qui donne
À noter cependant,
Autre remarque, écrire une vue, serait plus avantageux si tu veux multiplier les contrôles et les enregistrements sur une même fenêtre
3 questions :
- Tu définis le datacontext de la window dans le code behind et ensuite dans le XAML. Pourquoi ?
- Je pensais que le fait de définir le datacontext de la window suffisait pour les contrôles enfant. Héritage.
-Au niveau de la listview tu définis le datacontext et le itemssource. Je pensais que l'un des 2 serait suffisant. Et même je pensais que le fait d'avoir déclaré le datacontext de la window était suffisant (question précédente) .
En tout cas merci.
Je vais essayer çà . Je pense que j'ai encore beaucoup à apprendre sur le binding.
Ces 3 questions ont leur réponse dans le tuto précédemment cité