Héritant de DataGridTextColumn et en remplaçant GenerateElement
-
22-10-2019 - |
Question
Je tente de créer une coutume DataGrid où je peux formater des cellules individuelles en fonction de la valeur de la cellule (par exemple, le texte en rouge pour les valeurs négatives, vert pour postitive) ala cette approche ...
Comment obtenir une valeur de liaison de la cellule courante dans une grille de données WPFToolkit
Je dois aussi convertir les valeurs de négatif à parenthesised (c.-à-; -2,34 à (2,34)). J'ai l'héritage / travail overide. Ma question est, comment puis-je avoir accès aux valeurs dans les cellules dans la méthode GenerateElement surchargée.
Merci à l'avance, Phil
La solution
Mon approche était erronée. Je avais besoin d'utiliser IValueConverter et se lient le texte et les propriétés de premier plan ... aime si
type FixedDecimalConverter() =
interface IValueConverter with
member this.Convert(value, targetType, parameter, culture) =
match value :?> Double with
| Globals.DataGridHelper.IsNegative x ->
sprintf "(%.2f%%)" (Math.Abs x) :> obj
| Globals.DataGridHelper.IsPositive x ->
sprintf "%.2f%%" x :> obj
member this.ConvertBack(value, targetType, parameter, culture) = raise <| NotImplementedException()
type ForegroundValueConverter() =
interface IValueConverter with
member this.Convert(value, targetType, parameter, culture) =
match value :?> Double with
| Globals.DataGridHelper.IsNegative x -> Globals.DataGridHelper.redBrush :> obj
| Globals.DataGridHelper.IsPositive x -> Globals.DataGridHelper.greenBrush :> obj
member this.ConvertBack(value, targetType, parameter, culture) = raise <| NotImplementedException()
Et le XAML ...
<data:DataGridTemplateColumn Header="YTD v. Sector" x:Name="YTDvSector" Visibility="Collapsed">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock TextAlignment="Right" VerticalAlignment="Center"
Text="{Binding ytdSectorReturn.value, Converter={StaticResource fcFixedDecimalConverter}}"
Foreground="{Binding ytdSectorReturn.value, Converter={StaticResource fcForegroundValueConverter}}"/>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
Et la plomberie ...
<UserControl.Resources>
<y:FixedDecimalConverter x:Key="fcFixedDecimalConverter" />
<y:ForegroundValueConverter x:Key="fcForegroundValueConverter" />
</UserControl.Resources>