[XAML MVVM] ListView - Mise à jour d'une ObservableCollection.
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:
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:
Code:
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 |
Dans Modele j'ai bien sur:
Code:
Public Property GRD_DatasAll_Collection As ObservableCollection(Of MyHistory)
MyHistory est une classe de ce type :
Code:
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:
Code:
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 |
CHK_Colorref_Checked est le retour d'une checkbox.checked.
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.