Bonjour à tous,
J'ai un souci avec la mise à jour d'une ObervableCollection vers la Vue.
Lors du remplissage de la vue j'ai pas de souci, la listview se met bien a jour.
Dans ma vue j'ai une Listview que j'ai Implémente ainsi:
Code XAML : 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
76
77
78
79
80
81
82
83
84
85
86
87 <ListView Margin="10" Name="GRD_Datas" Height="340" ItemsSource="{Binding GRD_DatasAll_Collection }" SelectedItem="{Binding GRD_DatasAll_Selected}"> <ListView.ItemContainerStyle> <Style TargetType="ListViewItem"> <Setter Property="HorizontalContentAlignment" Value="Stretch" /> </Style> </ListView.ItemContainerStyle> <ListView.View> <GridView> <GridViewColumn Header="{Binding GRD_Header_Idx_Text, FallbackValue='idx'}" Width="30"> <GridViewColumn.CellTemplate> <DataTemplate> <Grid Background="{Binding Path=mColor}"> <TextBlock HorizontalAlignment="Center" Height="13" VerticalAlignment="Top" TextWrapping="Wrap" Text="{Binding Path=mIdx}"/> </Grid> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> <GridViewColumn Header="{Binding GRD_Header_Name_Text, FallbackValue= 'Alarm name'}" Width="230" > <GridViewColumn.CellTemplate> <DataTemplate > <Grid Background="{Binding Path=mColor}"> <TextBlock HorizontalAlignment="Right" Height="13" VerticalAlignment="Top" TextWrapping="Wrap" Text="{Binding Path=mName}"/> </Grid> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> <GridViewColumn Header="{Binding GRD_Header_Severity_Text, FallbackValue='Severity'}" Width="100"> <GridViewColumn.CellTemplate> <DataTemplate > <Grid Background="{Binding Path=mColor}"> <TextBlock HorizontalAlignment="Right" Height="13" VerticalAlignment="Top" TextWrapping="Wrap" Text="{Binding Path=mSeverity}"/> </Grid> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> <GridViewColumn Header="{Binding GRD_Header_Date_Text, FallbackValue='Date'}" Width="120"> <GridViewColumn.CellTemplate> <DataTemplate > <Grid Background="{Binding Path=mColor}"> <TextBlock HorizontalAlignment="Right" Height="13" VerticalAlignment="Top" TextWrapping="Wrap" Text="{Binding Path=mDate}"/> </Grid> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> <GridViewColumn Header="{Binding GRD_Header_Type_Text, FallbackValue='Type'}" Width="100"> <GridViewColumn.CellTemplate> <DataTemplate > <Grid Background="{Binding Path=mColor}"> <TextBlock HorizontalAlignment="Right" Height="13" VerticalAlignment="Top" TextWrapping="Wrap" Text="{Binding Path=mType}"/> </Grid> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> </GridView> </ListView.View> </ListView>
GRD_DatasAll_Collection est déclaré ainsi dans ma VueModele:
Dans Modele j'ai bien sur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Public Property GRD_DatasAll_Collection As ObservableCollection(Of MyHistory) Get Return Modele.GRD_DatasAll_Collection End Get Set(value As ObservableCollection(Of MyHistory)) Modele.GRD_DatasAll_Collection = value OnPropertyChanged("GRD_DatasAll_Collection") End Set End Property
MyHistory est une classe de ce type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Public Property GRD_DatasAll_Collection As ObservableCollection(Of MyHistory)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Public Class MyHistory Public Property mIdx As Integer Public Property mSeverity As String Public Property mSeverityLevel As ALARM_LEVEL Public Property mName As String Public Property mType As String Public Property mDate As String Public Property mColor As SolidColorBrush = Brushes.White End Class
Donc lorsque je rempli la collection, pas de souci.
Mais j'ai besoin de modifier par exemple la couleur de background des Cellules.
Je parcours la collection afin de changer mColor.
Ainsi:
CHK_Colorref_Checked est le retour d'une checkbox.checked.
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 Public Sub HistoRef() Dim Color As SolidColorBrush Dim i As Integer For i = 0 To GRD_DatasAll_Collection.Count - 1 If CHK_Colorref_Checked Then Select Case GRD_DatasAll_Collection(i).mSeverityLevel Case ALARM_LEVEL.vbUrgent Color = AppOptions.UrgColor Case ALARM_LEVEL.vbNonUrgent Color = AppOptions.NUrgColor Case ALARM_LEVEL.vbInfo Color = AppOptions.InfoColor Case ALARM_LEVEL.vbEvent Color = AppOptions.EventColor Case Else Color = Brushes.White End Select Else Color = Brushes.White End If GRD_DatasAll_Collection(i).mColor = Color Next 'J'ai tenté de rajouter cela, mais cela ne change rien. OnPropertyChanged("GRD_DatasAll_Collection") End Sub
Soir je met le background blanc ou de la couleur suivant ce que j'ai dans mon ".ini" --> AppOptions
Pourquoi cela ne se met pas à jour.
J'ai remarqué que si je bouge un paramètre dans le XAML à la volé, là il y a bien un rafraîchissement et donc une prise en compte de la nouvelle couleur qu'il y a dans la collection.
Merci de votre aide.
Partager