2010-06-01 2 views
5

Я пытаюсь создать пользовательский DataGrid, где я могу отформатировать отдельные ячейки на основе значения ячейки (т. Е. Красный текст для отрицательных значений, зеленый для постичного). Этот подход ...Наследование с DataGridTextColumn и переопределение GenerateElement

How to get Binding value of current cell in a WPFToolkit DataGrid

Мне также нужно преобразовать значения из отрицательного в скобки (т.е. от -2.34 до (2.34)). У меня есть работа наследования/переоценки. Мой вопрос: как получить доступ к значениям в ячейках в переопределенном методе GenerateElement.

Спасибо заранее, Phil

ответ

2

Мой подход был неправ. Мне нужно использовать IValueConverter и связать текстовые и Foreground свойства, как так ...

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() 

И в 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> 

И сантехнику ...

<UserControl.Resources> 
     <y:FixedDecimalConverter x:Key="fcFixedDecimalConverter" /> 
     <y:ForegroundValueConverter x:Key="fcForegroundValueConverter" /> 
    </UserControl.Resources> 
Смежные вопросы