Bonjour à tous, je me remet tranquillement au DataBinding (en Silverlight 4) en essayant de faire un petit truc tout simple mais je bloque.
Alors j'ai une classe personne qui ressemble à ça :
Ensuite dans mon interface j'ai juste une ComboBox que remplie à l'aide de ma static ObservableCollection<Personne> ListPersonnes. Puis j'aimerais qu'en fonction de la selection, le détail de ma personne s'affiche dans un formulaire à côté. j'ai donc procédé comme cela :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75 public class Personne :INotifyPropertyChanged { public static ObservableCollection<Personne> ListPersonnes = new ObservableCollection<Personne>(); private string _Nom; public string Nom { get { return this._Nom; } set { this._Nom = value; OnPropertyChanged("Nom"); } } private string _Prenom; public string Prenom { get { return this._Prenom; } set { this._Prenom = value; OnPropertyChanged("Prenom"); } } private DateTime _DateDeNaissance; public DateTime DateDeNaissance { get { return this._DateDeNaissance; } set { this._DateDeNaissance = value; } } public Personne(string _LeNom,string _LePrenom,DateTime _LaDate) { this.Nom = _LeNom; this.Prenom = _LePrenom; this._DateDeNaissance = _LaDate; ListPersonnes.Add(this); } public Personne() { } public override string ToString() { return this.Nom + ' ' + this.Prenom; } public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(string propName) { PropertyChangedEventHandler eh = this.PropertyChanged; if (null != eh) { eh(this, new PropertyChangedEventArgs(propName)); } } }
Main.xaml.cs :
et mon Main.xaml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 public partial class MainPage : UserControl { public Personne SelectedPersonne { get; set; } public MainPage() { InitializeComponent(); SelectedPersonne = new Personne(); Personne Personne1 = new Personne("Reagan", "Ronald", new DateTime(1911, 02, 06)); Personne Personne2 = new Personne("Mitterrand", "François", new DateTime(1916, 09, 26)); Personne Personne3 = new Personne("Marx", "Karl", new DateTime(1818, 05, 05)); Personne Personne4 = new Personne("Zedong", "Mao", new DateTime(1893, 12, 26)); Personne Personne5 = new Personne("Guevara", "Ernesto", new DateTime(1928, 06, 14)); Cb_Personnes.ItemsSource = Personne.ListPersonnes; } }
Déja mon Objet SelectedPersonne ne s'update pas lors d'un changement de selection de ma comboBox.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 <Grid x:Name="LayoutRoot" Background="White" Height="300" Width="400" > <Grid.RowDefinitions> <RowDefinition Height="150"></RowDefinition> <RowDefinition Height="30"></RowDefinition> <RowDefinition Height="30"></RowDefinition> </Grid.RowDefinitions> <Grid x:Name="GridPersonne" Grid.Row="0" DataContext="{Binding SelectedPersonne,Mode=TwoWay}"> <Grid.ColumnDefinitions> <ColumnDefinition Width="50*"></ColumnDefinition> <ColumnDefinition Width="50*"></ColumnDefinition> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="35"></RowDefinition> <RowDefinition Height="35"></RowDefinition> <RowDefinition Height="35"></RowDefinition> <RowDefinition Height="35"></RowDefinition> <RowDefinition Height="35"></RowDefinition> <RowDefinition Height="35"></RowDefinition> </Grid.RowDefinitions> <!--Les labels--> <TextBlock Text="Nom : " Grid.Column="0" Grid.Row="0" HorizontalAlignment="Right"></TextBlock> <TextBlock Text="Prenom : " Grid.Column="0" Grid.Row="1" HorizontalAlignment="Right"></TextBlock> <TextBlock Text="Date de Naissance : " Grid.Column="0" Grid.Row="2" HorizontalAlignment="Right"></TextBlock> <!--les composants que l'on va Binder--> <TextBox Name="Tb_Nom" Grid.Column="1" Grid.Row="0" Text="{Binding Nom,Mode=TwoWay}"></TextBox> <TextBox Name="Tb_Prenom" Grid.Column="1" Grid.Row="1" Text="{Binding Prenom,Mode=TwoWay}"></TextBox> <sdk:DatePicker Name="Dp_Date" Grid.Column="1" Grid.Row="2" SelectedDate="{Binding DateDeNaissance,Mode=TwoWay}"/> </Grid> <TextBlock Text="Liste des personnes : " Grid.Row="1"></TextBlock> <ComboBox Name="Cb_Personnes" Grid.Row="2" SelectedItem="{Binding SelectedPersonne,Mode=TwoWay}"></ComboBox> </Grid>
Si je rajoute à la main sur l'evenement SelectionChanged de ma comboBox :
Et que j'enlève le binding de SelectedItem de ma comboBox, cela n'update toujours pas mon formulaire je suis obliger de rajouter :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Cb_Personnes.SelectionChanged += (o, e) => { var r = o as ComboBox; SelectedPersonne = r.SelectedItem as Personne; };
Mais je ne trouve pas ça très propre, je crois que j'ai raté quelque chose mais je ne vois pas quoi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Cb_Personnes.SelectionChanged += (o, e) => { var r = o as ComboBox; SelectedPersonne = r.SelectedItem as Personne; LayoutRoot.DataContext = SelectedPersonne; };
Cordialement MoZo






Répondre avec citation





Comment pour que si par exemple je modifie le nom de François, par Pierre, et bien j'ai Pierre Mitterrand qui s'affiche dans ma comboBox ??

Partager