Erben von DataGridTextColumn und überragende GenerateElement
-
22-10-2019 - |
Frage
Ich versuche, ein benutzerdefiniertes DataGrid zu erstellen, in dem ich einzelne Zellen basierend auf dem Zellwert (dh roter Text für negative Werte, grün für postitive) formatieren kann.
So erhalten Sie den Bindungswert der aktuellen Zelle in einem WPFTOOLKIT -DataGrid
Ich muss auch die Werte von negativ in Klammern konvertieren (dh; -2,34 in (2,34)). Ich habe das Erbe/die Übergabe funktioniert. Meine Frage ist, wie ich Zugriff auf die Werte in den Zellen in der überragenden GenerateElement -Methode bekomme.
Vielen Dank im Voraus, Phil
Lösung
Mein Ansatz war falsch. Ich musste Ivalueconverter verwenden und die Text- und Vordergrundeigenschaften so binden ...
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()
Und das 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>
Und die Sanitär ...
<UserControl.Resources>
<y:FixedDecimalConverter x:Key="fcFixedDecimalConverter" />
<y:ForegroundValueConverter x:Key="fcForegroundValueConverter" />
</UserControl.Resources>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow