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

War es hilfreich?

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
scroll top