Hello tout le monde
J'ai une appli SL4 qui permet de suivre une partie de ce qui transite sur le temps réel de ma boite.
En gros, c'est un Datagrid de 30 colonnes et potentiellement quelques milliers de lignes.
Le grid est bindé sur une PagedCollectionView<Deal> où Deal est mon entity.
Chaque ligne de mon grid doit avoir une couleur de fond et une couleur de police en fonction de 2 propriétés de l'objet Deal.
Un objet Deal est souvent updaté donc je ne peux pas utiliser l'event RowLoading de mon Grid qui n'est appelé qu'à l'affichage de la ligne.
La solution mise en place par mon collègue est de DataTempler chaque cellule et d'utiliser un converter pour le background color et un autre pour le foreground color.
Point de vue perf, c'est pas top donc j'essaie d'optimiser ça.
Je cherche un moyen d'agir au niveau de la ligne et non de chaque cellule.
Pour la couleur de fond, j'ai modifié le template du DataGridRow pour ajouter un Rectangle:
1- Ca fonctionne pas trop mal mais un objet que je n'ai pas identifié et se trouvant au dessus de Rectangle (z-index parlant) ajoute une opacité et donc la couleur affichée est trop "fade".
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 <Rectangle x:Name="BackgroundRectangle" Grid.ColumnSpan="2" Fill="#FF581D74" Opacity="0" Grid.RowSpan="2" /> <Rectangle x:Name="InvalidVisualElement" Grid.ColumnSpan="2" Fill="#FFF7D8DB" Opacity="0" Grid.RowSpan="2" /> <Rectangle x:Name="BackgroundColorRectangle" Visibility="Visible" Grid.ColumnSpan="2" Grid.RowSpan="2"> <tool:BindingUtil.MultiBindings> <tool:MultiBindings> <tool:MultiBinding TargetProperty="Fill" Converter="{StaticResource resDealColorConverter}"> <tool:BindingCollection> <Binding Path="Status" /> <Binding Path="HedgeMode" /> </tool:BindingCollection> </tool:MultiBinding> </tool:MultiBindings> </tool:BindingUtil.MultiBindings> </Rectangle> <sdk:DataGridRowHeader x:Name="RowHeader" sdk:DataGridFrozenGrid.IsFrozen="True" Grid.RowSpan="3" /> <sdk:DataGridCellsPresenter x:Name="CellsPresenter" Grid.Column="1" Background="Transparent" sdk:DataGridFrozenGrid.IsFrozen="True" /> <sdk:DataGridDetailsPresenter x:Name="DetailsPresenter" Grid.Column="1" Grid.Row="1" /> <Rectangle x:Name="BottomGridLine" Grid.Column="1" HorizontalAlignment="Stretch" Height="1" Grid.Row="2" />
2- J'ai pas d'idée sur comment agir sur le Foreground Color
Des idées pour ces 2 soucis???
Merci
Partager